zixl-info lists the tables and summary information of any installer package #19

Closed
opened 2026-10-14 09:50:52 -05:00 by jeff · 1 comment
Owner

Part of #18

What to build

The reader, end to end: zixl.read turns an installer package's bytes into an installer database and its streams. zixl-info tables FILE and zixl-info suminfo FILE print what it found, as msiinfo does.

Acceptance criteria

  • Packages zixl writes read back to the database they were written from (seam-1 round trip over the fixtures).
  • The compound file reader handles versions 3 and 4, mini streams and the DIFAT. The string pool handles long references, long strings and duplicate entries.
  • Bytes that are not an installer package are refused with a diagnostic, never a crash. A fuzz target covers read.
  • nix flake check compares zixl-info tables and suminfo with msiinfo's, for zixl's and wixl's package of every fixture.

Blocked by

None (can start immediately)

Part of #18 ## What to build The reader, end to end: `zixl.read` turns an installer package's bytes into an installer database and its streams. `zixl-info tables FILE` and `zixl-info suminfo FILE` print what it found, as `msiinfo` does. ## Acceptance criteria - [ ] Packages zixl writes read back to the database they were written from (seam-1 round trip over the fixtures). - [ ] The compound file reader handles versions 3 and 4, mini streams and the DIFAT. The string pool handles long references, long strings and duplicate entries. - [ ] Bytes that are not an installer package are refused with a diagnostic, never a crash. A fuzz target covers `read`. - [ ] `nix flake check` compares `zixl-info tables` and `suminfo` with `msiinfo`'s, for zixl's and wixl's package of every fixture. ## Blocked by None (can start immediately)
Author
Owner

Done in 7bb90da (CI run 15: test and e2e green). zixl.read reads an installer package back into its installer database:

  • compound files of versions 3 and 4, with mini streams and the DIFAT;
  • the string pool, with long references, long strings and free slots;
  • _Tables/_Columns, binary cells and the summary information.

zixl-info tables and suminfo match msiinfo for zixl's and wixl's package of every fixture, apart from times printed in UTC and summary text decoded from its code page. tests/read.zig round-trips every fixture on every architecture, plus the >65535-string and long-string cases. A fuzz target covers read; 50K runs found nothing.

Done in 7bb90da (CI run 15: test and e2e green). `zixl.read` reads an installer package back into its installer database: - compound files of versions 3 and 4, with mini streams and the DIFAT; - the string pool, with long references, long strings and free slots; - `_Tables`/`_Columns`, binary cells and the summary information. `zixl-info tables` and `suminfo` match `msiinfo` for zixl's and wixl's package of every fixture, apart from times printed in UTC and summary text decoded from its code page. `tests/read.zig` round-trips every fixture on every architecture, plus the >65535-string and long-string cases. A fuzz target covers `read`; 50K runs found nothing.
jeff closed this issue 2026-10-14 10:41:21 -05:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
jeff/zixl#19
No description provided.