Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] Crash: FormViewController attempts to remove rows from empty section #2262

Open
ctr119 opened this issue Dec 17, 2024 · 0 comments
Open

Comments

@ctr119
Copy link

ctr119 commented Dec 17, 2024

Hi 👋🏻

While working on a Client's App, Firebase reported a weird crash that is caused by FormViewController trying to remove some rows from a section that does contain anything, when actually it says the opposite.

The trace starts here in the Client's app code:

            if !self.feedSection.isEmpty {
                self.feedSection.removeAll()
            }

where feedSection is Eureka.Section.

The .isEmpty property states that the section is not empty, so the App proceeds to remove the content. Then, it crashes at FormViewController.rowsHaveBeenRemoved(_:at:) with the following message:

attempt to delete row 4 from section 0 which only contains 0 rows before the update

Here you go the stack trace I got from Firebase:

          Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x827cc __exceptionPreprocess
1  libobjc.A.dylib                0x172e4 objc_exception_throw
2  Foundation                     0x80f8d8 _userInfoForFileAndLine
3  UIKitCore                      0x354630 -[UITableView _endCellAnimationsWithContext:]
4  UIKitCore                      0x388f78 -[UITableView endUpdatesWithContext:]
5  Pan                            0x51de70 FormViewController.rowsHaveBeenRemoved(_:at:) + 733 (Core.swift:733)
6  Pan                            0x55ed00 specialized Section.KVOWrapper.observeValue(forKeyPath:of:change:context:) + 94 (Section.swift:94)
7  Pan                            0x555dd8 @objc Section.KVOWrapper.observeValue(forKeyPath:of:change:context:) (<compiler-generated>)
8  Foundation                     0x1a72c NSKeyValueNotifyObserver
9  Foundation                     0x1a420 NSKeyValueDidChange
10 Foundation                     0x11d17c -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:maybeNewValuesDict:usingBlock:]
11 Foundation                     0x11cd98 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:]
12 Foundation                     0x11c22c _NSSetObjectValueAndNotify
13 Pan                            0x55f784 specialized Section.removeAll(keepingCapacity:) + 78 (Section.swift:78)

Steps To Reproduce

Sadly, I was not able to reproduce it myself 😞 but it is constantly crashing according to Firebase: 207 crash events affecting 206 users in the last week since today.

Expected behavior

I would have expected the .isEmpty function to work as intended, so the App does not tries to remove rows if the section is already empty. Also, I would have expected the SDK to check the section's content before updating it.

Having a look, I have seen that there are no checks done before the Form updates the TableView in FormViewController.rowsHaveBeenRemoved(_:at:).

Versions

  • Device: iPhone 13
  • OS: iOS 18.1.1
  • Eureka Version: 5.5.0
  • Xcode version: 15.4

Additional context

Just in case it helps, the % of free RAM according to Firebase is 160.43 MB.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant