[PR #635] Fix brotlidump.py crashing when complex prefix code has exactly 1 non-zero code length #1289

Open
opened 2026-01-29 20:53:21 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/google/brotli/pull/635

State: closed
Merged: Yes


According to the format specification regarding complex prefix codes:

If there are at least two non-zero code lengths, any trailing zero
code lengths are omitted, i.e., the last code length in the
sequence must be non-zero. In this case, the sum of (32 >> code
length) over all the non-zero code lengths must equal to 32.

If the lengths have been read for the entire code length alphabet
and there was only one non-zero code length, then the prefix code
has one symbol whose code has zero length.

The script does not handle a case where there is just 1 non-zero code
length where the sum rule doesn't apply, which causes a StopIteration
exception when it attempts to read past the list boundaries.

An example of such file is tests/testdata/mapsdatazrh.compressed. I made
sure this change doesn't break anything by processing all *.compressed
files from the testdata folder with no thrown exceptions.

**Original Pull Request:** https://github.com/google/brotli/pull/635 **State:** closed **Merged:** Yes --- According to the format specification regarding complex prefix codes: > If there are at least two non-zero code lengths, any trailing zero > code lengths are omitted, i.e., the last code length in the > sequence must be non-zero. In this case, the sum of (32 >> code > length) over all the non-zero code lengths must equal to 32. > If the lengths have been read for the entire code length alphabet > and there was only one non-zero code length, then the prefix code > has one symbol whose code has zero length. The script does not handle a case where there is just 1 non-zero code length where the sum rule doesn't apply, which causes a StopIteration exception when it attempts to read past the list boundaries. An example of such file is tests/testdata/mapsdatazrh.compressed. I made sure this change doesn't break anything by processing all *.compressed files from the testdata folder with no thrown exceptions.
claunia added the pull-request label 2026-01-29 20:53:21 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/brotli#1289