Repository navigation
Conversation
…ad/write interoperability
…al-permission flow
…ailures and successful grant
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.
Plaintext SQLite + Android shared storage regression reproducer
Uses the exact TotalCross 7.3.0 SDK and native TCVM package built in TotalCross workflow 40878222908 (artifact 12899147776, source SHA
5464c21e3107e3f1ce9c287b724829e2bb870c1d), also used by release workflow 40879229660. No changes to the TCVM.Client example
The supplied Main.zip includes Main.java, TestPermission.java and Main.apk. TestPermission.java does not use SQLite: it sets
Settings.dataPath="/sdcard/", then creates/deletes/sdcard/asdusing TotalCrossFile. The supplied APK targets SDK 36 (min 24) and declaresMANAGE_EXTERNAL_STORAGE.The updated Android probe includes this exact filesystem operation, plus creation and re-opening of an unencrypted SQLite database in
/sdcard, and opening/updating a pre-existing standard SQLite file pushed to/sdcardby the test runner.Verified results
Android 15 emulator job — run 41888918200 — Android APK, separate logcats, SQLite fixtures, permission screenshots and diagnostics.
appops MANAGE_EXTERNAL_STORAGE ignore):File.createDir("/sdcard/asd")triggers the special-permission Settings screen. The CI runner detects it and returns via BACK. The filesystem call fails withError Code: 13 - Permission denied. SQLiteNativeDB._openfor new and pre-existing databases on/sdcardfails with[-1] unknown error (out of memory). SQLite within the application's private data directory still passes.appops MANAGE_EXTERNAL_STORAGE allow): all in-app,/sdcard/asd, external new-DB, reopen/UPDATE/integrity, plaintext header and pre-existing external DB checks PASS. After TotalCross modifies the pre-existing database, host Python SQLite independently reads backupdated-by-totalcrossand verifies integrityok.file is not a databasemessage atNativeDB._exec/Stmt.executeUpdate. The denied reproduction fails earlier atNativeDB._open.__realpath_chk/glibc abort, unrelated to SQLite; the full workflow may still be red for Linux.Test evidence and safety
The runner validates APK manifest permission, ABI/installation mode, and runtime appops; uses the exact same APK twice; captures separate denied/granted
logcatand event JSON, all-files-access Settings screenshot, appops states, crash logs, file-path metadata, original and read-back SQLite fixtures, APK, build/deploy logs and source hashes. All data is generated by the test; the customer APK is not committed. Toggling appops models permission state, not a real user's tap to authorize the permission.See
tests/sqlite-plaintext/README.mdfor test contract and reproduction notes.