# Test Case: Corrupted Superblock Fields

**Test ID**: TC015-superblock-corrupted
**Category**: Error Handling
**Priority**: High

## Objective

Verify ordered rejection of an unsupported block size, an image-bounds-invalid
48-bit root NID, and an unknown incompat feature. Every variant preserves
provider length and carries a checksum valid for its encoded fields.

## Fixture Qualification

```sh
work=$(mktemp -d /tmp/repo22-tc015.XXXXXX)
tests/prepare_error_fixtures.sh "$work/fixtures"
grep -E '^(bad-block-size|bad-root-nid|unsupported-feature) ' \
  "$work/fixtures/fixture-evidence.txt"
python3 tests/erofs_fixture.py inspect "$work/fixtures/bad-block-size.erofs"
python3 tests/erofs_fixture.py inspect "$work/fixtures/bad-root-nid.erofs"
python3 tests/erofs_fixture.py inspect "$work/fixtures/unsupported-feature.erofs"
(cd "$work/fixtures" && sha256 -c SHA256SUMS)
```

`bad-block-size` changes `blkszbits` at 1036 from 12 to 13 and recomputes the
checksum over `[1024,8192)`. `bad-root-nid` selects the 48-bit union form and
sets `rootnid_8b` beyond the declared inode area. `unsupported-feature` sets
unknown incompat bit `0x80000000`.

## FreeBSD Procedure

For each image, attach a dynamic vnode md unit, run mount directly and under
`truss`, assert nonzero status and no mount entry, then detach that exact unit.

```sh
mkdir "$work/mnt"
for image in bad-block-size.erofs bad-root-nid.erofs unsupported-feature.erofs
do
  unit=$(mdconfig -a -t vnode -f "$work/fixtures/$image")
  set +e
  mount -t erofs -o ro "/dev/$unit" "$work/mnt" \
    >"$work/$image.out" 2>"$work/$image.err"
  status=$?
  set -e
  printf '%s status=%s\n' "$image" "$status"
  test "$status" -ne 0
  set +e
  truss -o "$work/$image.truss" mount -t erofs -o ro "/dev/$unit" \
    "$work/mnt" >/dev/null 2>&1
  set -e
  grep -E 'nmount.*ERR#' "$work/$image.truss"
  ! mount -p | awk -v path="$work/mnt" '$2 == path { found=1 }
    END { exit found ? 0 : 1 }'
  mdconfig -d -u "${unit#md}"
done
```

## Expected Results

Bad block size returns `EINVAL`, bad root NID returns `EINTEGRITY`, and the
unknown incompat bit returns `EOPNOTSUPP`. Record syscall errno, image hash,
provider length, new dmesg lines, and cleanup for all three subcases.
