Files
gmipf e818a322ac Fix MS-ZIP blocks that end with short codes or copy from 32 KiB back (#7)
* Decode short codes at the end of the inflate input

InflateCodes waited for as many bits as its lookup table uses before
it decoded a literal, length or distance code. When the input ended
with fewer bits than that, the last codes were not decoded, even though
they were complete. An MS-ZIP block is a deflate stream on its own, so
its last match was lost and the block came out short (#1).

When no more input is there, the code is now looked up with the bits
that are left and used if it is not longer than those.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Keep a full 32 KiB inflate dictionary

SetDictionary kept only the last 32767 bytes of a 32 KiB dictionary,
because the window needs one free byte between its read and write
positions. MS-ZIP sets the previous 32 KiB block as the dictionary,
and a match at the start of a block can copy from 32768 bytes back,
which then read a byte that was not in the window.

A dictionary that fills the window now starts with the read and write
positions at 0, so the first byte written replaces the oldest byte of
the dictionary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 21:35:22 -04:00
..
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-08-27 14:21:52 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00
2026-03-21 13:55:42 -04:00