Skip to content

Commit

Permalink
gh-104282: Fix null pointer dereference in `lzma._decode_filter_prope…
Browse files Browse the repository at this point in the history
…rties` (GH-104283)
  • Loading branch information
chgnrdv authored Jan 17, 2024
1 parent b204c4b commit 0154405
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
8 changes: 8 additions & 0 deletions Lib/test/test_lzma.py
Original file line number Diff line number Diff line change
Expand Up @@ -1401,6 +1401,14 @@ def test__decode_filter_properties(self):
self.assertEqual(filterspec["lc"], 3)
self.assertEqual(filterspec["dict_size"], 8 << 20)

# see gh-104282
filters = [lzma.FILTER_X86, lzma.FILTER_POWERPC,
lzma.FILTER_IA64, lzma.FILTER_ARM,
lzma.FILTER_ARMTHUMB, lzma.FILTER_SPARC]
for f in filters:
filterspec = lzma._decode_filter_properties(f, b"")
self.assertEqual(filterspec, {"id": f})

def test_filter_properties_roundtrip(self):
spec1 = lzma._decode_filter_properties(
lzma.FILTER_LZMA1, b"]\x00\x00\x80\x00")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix null pointer dereference in :func:`lzma._decode_filter_properties`
due to improper handling of BCJ filters with properties of zero length.
Patch by Radislav Chugunov.
4 changes: 3 additions & 1 deletion Modules/_lzmamodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,9 @@ build_filter_spec(const lzma_filter *f)
case LZMA_FILTER_ARMTHUMB:
case LZMA_FILTER_SPARC: {
lzma_options_bcj *options = f->options;
ADD_FIELD(options, start_offset);
if (options) {
ADD_FIELD(options, start_offset);
}
break;
}
default:
Expand Down

0 comments on commit 0154405

Please sign in to comment.