diff --git a/deny.toml b/deny.toml index 815cbb4..d4d9668 100644 --- a/deny.toml +++ b/deny.toml @@ -7,6 +7,15 @@ exclude = ["sqlite-forensic-fuzz"] [advisories] version = 2 yanked = "deny" +# Time-boxed ignore (added 2026-07; revisit each release). quick-xml <0.41 has +# two DoS advisories — RUSTSEC-2026-0194 (quadratic duplicate-attribute check) +# and RUSTSEC-2026-0195 (unbounded namespace-declaration allocation). Both are +# DoS-only (not RCE/memory-unsafety) and reach the tree ONLY through the +# dev-dependency `calamine 0.35.0`, which pins `quick-xml = "^0.39"` and cannot +# resolve to the fixed 0.41.0. calamine 0.35 is the newest release in our range, +# so no upgrade path exists yet. Drop both IDs once calamine widens its quick-xml +# requirement to >=0.41 (or a newer calamine we can adopt does). +ignore = ["RUSTSEC-2026-0194", "RUSTSEC-2026-0195"] [licenses] version = 2 diff --git a/forensic/tests/audit.rs b/forensic/tests/audit.rs index 01afbf5..84d82fb 100644 --- a/forensic/tests/audit.rs +++ b/forensic/tests/audit.rs @@ -282,9 +282,16 @@ fn real_engine_secure_delete_raises_the_fingerprint() { return; } + // `auto_vacuum=NONE` is load-bearing: a sqlite3 built with + // `SQLITE_DEFAULT_AUTOVACUUM=1` (e.g. the macOS CI runner's engine) reclaims + // the DELETE-freed pages and truncates the file, leaving freelist_count=0 and + // NO freed leaf pages — so the fingerprint has nothing to fire on and the + // oracle's premise fails through no fault of the detector. Forcing auto_vacuum + // off keeps the freed-leaf freelist on every conforming build (a no-op on the + // builds that already default to off), making the oracle host-independent. // Enough rows that DELETE frees whole pages onto the freelist (in-page // freeblocks alone would leave freelist_count=0 and exercise nothing). - let script = "PRAGMA page_size=4096; CREATE TABLE t(x TEXT);\n\ + let script = "PRAGMA auto_vacuum=NONE; PRAGMA page_size=4096; CREATE TABLE t(x TEXT);\n\ WITH RECURSIVE c(n) AS (SELECT 1 UNION ALL SELECT n+1 FROM c WHERE n<2000)\n\ INSERT INTO t SELECT 'row-'||n||'-'||hex(randomblob(40)) FROM c;\n\ DELETE FROM t WHERE rowid>200;";