You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
cabextract is installed on the build machine and nothing asks it. It refuses
every compressed cabinet we write, in three different ways:
$ cabextract -t ours-mszip.cab
A.TXT failed (decompression error)
$ cabextract -t ours-lzx.cab
A.TXT failed (error in CAB data format)
$ cabextract -t ours-quantum.cab
A.TXT failed (out of memory)
A stored cabinet passes both readers. 7-Zip accepts our MSZIP and refuses our
LZX and Quantum, so the MSZIP case is one where the two readers disagree about
us and only the stricter one notices.
cabextract is libmspack, which is the reference implementation for all three
of these encodings, so where it and we differ the difference is ours.
Leads, untested:
MSZIP — each block is a raw deflate stream of its own preceded by CK,
and the history from the previous block carries over into the next. A writer
that emits one continuous deflate stream, or that resets the window per
block, produces something a lenient inflater still reads and a strict one
does not.
LZX — the same encoding the WIM writer had wrong (! our WIM writer produces something no WIM reader will open #76): ours is a
dialect that round-trips against itself and nothing else. CAB, CHM and WIM
all go through LzxCompressor, so one fix covers three formats. The WIM
half of the evidence is in the sibling issue.
Quantum — "out of memory" is what libmspack reports for a window level
it cannot make sense of; the level is packed into the high byte of the
compression-type word beside the type itself.
The way to work these is the way #76 was worked: cabextract and 7-Zip
disagree with each other as well as with us, so both have to be asked, and a
cabinet the reference tool writes is available for comparison — gcab, or cabextract on any cabinet already on disk. Compare one block at a time
rather than reasoning about the format from memory.
cabextractis installed on the build machine and nothing asks it. It refusesevery compressed cabinet we write, in three different ways:
A stored cabinet passes both readers. 7-Zip accepts our MSZIP and refuses our
LZX and Quantum, so the MSZIP case is one where the two readers disagree about
us and only the stricter one notices.
cabextractis libmspack, which is the reference implementation for all threeof these encodings, so where it and we differ the difference is ours.
Leads, untested:
CK,and the history from the previous block carries over into the next. A writer
that emits one continuous deflate stream, or that resets the window per
block, produces something a lenient inflater still reads and a strict one
does not.
dialect that round-trips against itself and nothing else. CAB, CHM and WIM
all go through
LzxCompressor, so one fix covers three formats. The WIMhalf of the evidence is in the sibling issue.
it cannot make sense of; the level is packed into the high byte of the
compression-type word beside the type itself.
The way to work these is the way #76 was worked:
cabextractand 7-Zipdisagree with each other as well as with us, so both have to be asked, and a
cabinet the reference tool writes is available for comparison —
gcab, orcabextracton any cabinet already on disk. Compare one block at a timerather than reasoning about the format from memory.