fix(cloudkitSharing): skip NoteStore.sqlite files without the CloudKit table - #1773
Merged
abrignoni merged 1 commit intoJul 26, 2026
Merged
Conversation
…t table iOS leaves zero-byte NoteStore.sqlite placeholders under group.com.apple.notes/Backups/<date>/, and the artifact's '*NoteStore.sqlite*' glob matches them. sqlite3 opens a zero-byte file as an empty database, so the first SELECT raised 'no such table: ZICCLOUDSYNCINGOBJECT' and aborted both CloudKit artifacts before the real NoteStore.sqlite was read - the examiner got no shares at all, only a parsing error in the log. Both processors now guard with does_table_exist_in_db(), the same idiom scripts/artifacts/notes.py already uses for its own queries. Adds admin/test/scripts/test_cloudkit_sharing_missing_table.py covering both processors against a zero-byte placeholder alongside a schema-bearing db.
pull Bot
pushed a commit
to nagyist/abrignoni-iLEAPP
that referenced
this pull request
Jul 26, 2026
…ing schema PR abrignoni#1773 guards both CloudKit processors with does_table_exist_in_db so the zero-byte NoteStore.sqlite placeholders iOS leaves under Backups/<date>/ no longer abort the artifact. The guard skipped silently, though, which is right for a placeholder but would also swallow a truncated or unreadable database: the examiner would get no shares and nothing in the run log to explain it. Both call sites now go through has_cloudkit_table(), which logs the file and its size on the way out. A 0-byte skip reads as routine, while a skip with real bytes in the file flags data the examiner should look at. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1726
iOS leaves zero-byte
NoteStore.sqliteplaceholders undergroup.com.apple.notes/Backups/<date>/, and the artifact's*NoteStore.sqlite*glob matches them. sqlite3 opens a zero-byte file as an empty database, so the firstSELECTraisedno such table: ZICCLOUDSYNCINGOBJECTand aborted both CloudKit processors before the realNoteStore.sqlitein the same extraction was read — which is why the reporter saw no shares at all until they deleted the backup files by hand.Both processors now guard with
does_table_exist_in_db(), the same idiomscripts/artifacts/notes.pyalready uses for its own queries.Test in
admin/test/scripts/test_cloudkit_sharing_missing_table.pyruns both processors over a zero-byte placeholder alongside a schema-bearing db; it fails with the reportedOperationalErrorwithout the guard and passes with it.