# Test Case: Targeted Compressed-Stream Corruption **Test ID**: TC116-truncated-compressed **Category**: Error Handling **Priority**: Critical ## Objective Verify targeted damage inside a proven LZ4 physical extent reaches `z_erofs_decompress` and returns `EIO`. Provider length must remain identical; this is not a short-media test. ## Fixture Qualification ```sh work=$(mktemp -d /tmp/repo22-tc116.XXXXXX) tests/prepare_error_fixtures.sh "$work/fixtures" cc -O2 -Wall -Wextra -std=c17 tests/read_probe.c -o "$work/read_probe" cat "$work/fixtures/compressed.extents" grep '^compressed-stream-corrupt ' "$work/fixtures/fixture-evidence.txt" wc -c "$work/fixtures/valid-lz4.erofs" \ "$work/fixtures/compressed-stream-corrupt.erofs" cat "$work/fixtures/compressed-corrupt-fsck.txt" sha256 -q "$work/fixtures/compressed-stream-corrupt.erofs" ``` The generator parses extent 0 for `/compressed.bin`, proves the 64-byte patch at extent offset +32 lies wholly inside that extent, changes nonzero bytes to zero, remains outside the superblock checksum window, preserves provider length, and requires `fsck.erofs --extract` failure. The superblock checksum remains valid because payload bytes are outside its range. ## FreeBSD Procedure ```sh mkdir "$work/mnt" unit=$(mdconfig -a -t vnode \ -f "$work/fixtures/compressed-stream-corrupt.erofs") mount -t erofs -o ro "/dev/$unit" "$work/mnt" cmp "$work/fixtures/source/control.txt" "$work/mnt/control.txt" probe_module=$(dtrace -l -f z_erofs_decompress | awk \ '$4 == "z_erofs_decompress" && $5 == "entry" { print $3; exit }') test -n "$probe_module" dtrace -l -n "fbt:$probe_module:z_erofs_decompress:entry" set +e dtrace -q -n "fbt:$probe_module:z_erofs_decompress:entry { @calls = count(); } END { printa(\"decompress_calls=%@d\\n\", @calls); }" \ -c "$work/read_probe expect-error $work/mnt/compressed.bin 5" \ >"$work/dtrace.out" 2>"$work/dtrace.err" dtrace_status=$? set -e cat "$work/dtrace.out" test "$dtrace_status" -eq 0 grep -Eq 'decompress_calls=[1-9][0-9]*' "$work/dtrace.out" truss -o "$work/read.truss" "$work/read_probe" expect-error \ "$work/mnt/compressed.bin" 5 | tee "$work/error.out" grep -q 'expected_errno=5' "$work/error.out" grep -E 'read.*ERR#5' "$work/read.truss" cmp "$work/fixtures/source/control.txt" "$work/mnt/control.txt" umount "$work/mnt" mdconfig -d -u "${unit#md}" kldunload dtraceall ``` ## Expected Results Mount succeeds, proving media-size validation passed. FBT records at least one `z_erofs_decompress` entry for the target command, and the target read returns errno 5 (`EIO`). Control data remains readable and cleanup is complete.