# Negative-input fixtures
Small, hand-made files that exist to fail a specific way. Neither is
generated by `examples/gen-fixtures.rs`'s scenario harness (which only
produces `.xlsx`/ZIP content) — `encrypted.xlsx` *is* produced by that
generator, but as a standalone file outside the old/new scenario loop; see
below for why.
## `encrypted.xlsx`
**Not an `.xlsx` file, and not encrypted.** A minimal hand-built CFB
(Compound File Binary / OLE2) container containing exactly one directory
entry, named `EncryptedPackage`, with no payload. That single fact is
sufficient to trigger calamine 0.36.1's password-protection detection
(`xlsx/mod.rs::check_for_password_protected`), which is purely structural:
it opens the input as a CFB container and checks for a directory entry with
that exact name — nothing about the entry's contents, and nothing about
real encryption.
**Provenance.** Built by `build_encrypted_workbook_fixture()` in
`examples/gen-fixtures.rs`. Regenerate with:
```
cargo run --example gen-fixtures
```
1536 bytes: a 512-byte CFB header, one 512-byte FAT sector, one 512-byte
directory sector holding a Root Entry and the `EncryptedPackage` entry (plus
two unused, zeroed directory-entry slots to fill the sector). No stream
data anywhere — the entry is a storage, not a stream, and calamine's check
never looks past its name.
**This fixture's correctness rests on calamine's internal behaviour, not a
documented contract.** If a future calamine version changes what it treats
as password-protected, this fixture stops tripping the check, and the
resulting test failure is that coupling surfacing correctly — not a bug in
the fixture itself. See `examples/gen-fixtures.rs`'s comment above the
builder for the exact calamine source excerpt this was built against, and
[MS-CFB] for the container format.
## `not_a_zip.xlsx`
A 25-byte file with a valid gzip header that is not a ZIP archive, used to
exercise the `OpenErrorKind::NotXlsx` path. Its provenance was not
investigated as part of adding `encrypted.xlsx` (M5 Handoff 03) — out of
that unit's scope, noted here rather than silently left unmentioned.