Skip to content

fix(database): prevent FUIArray crash on desynced child events#1377

Open
demolaf wants to merge 8 commits into
mainfrom
fix/fuiarray-desync-crash-517
Open

fix(database): prevent FUIArray crash on desynced child events#1377
demolaf wants to merge 8 commits into
mainfrom
fix/fuiarray-desync-crash-517

Conversation

@demolaf

@demolaf demolaf commented Jul 20, 2026

Copy link
Copy Markdown
Member

Fixes #517.

FUIArray throws an uncatchable NSInternalInconsistencyException whenever a child event references a key missing from its local model — which legitimately happens with queryLimited(toLast:) under concurrent server-side writes, crashing the app inside the Firebase callback.

This guards the four throw sites to reconcile instead of crashing: removeSnapshot: no-ops when the key is already gone, insertSnapshot: appends on an unknown previous sibling, and changeSnapshot:/moveSnapshot: recover an unknown key as an insert. Adds a regression test per path.

Preview

Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-07-21.at.12.02.09.mov

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request addresses local model desynchronization issues (GitHub issue #517) in FUIArray by preventing crashes when operations encounter unknown keys. Instead of throwing exceptions, the code now gracefully handles these cases by appending or recovering them as inserts. Unit tests have been added to cover these scenarios. The feedback suggests making the new tests more robust by asserting the exact insertion index of recovered snapshots rather than just verifying the array count.

Comment thread FirebaseDatabaseUI/FirebaseDatabaseUITests/FUIArrayTest.m Outdated
Comment thread FirebaseDatabaseUI/FirebaseDatabaseUITests/FUIArrayTest.m Outdated
@demolaf
demolaf marked this pull request as draft July 20, 2026 15:00
@demolaf
demolaf marked this pull request as ready for review July 21, 2026 11:03
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

Successfully merging this pull request may close these issues.

Crash: [FUIArray insertSnapshot:withPreviousChildKey:]

1 participant