Skip to content

Commit fb5ccfc

Browse files
Greg's review notes and news entry
1 parent 1d1ac33 commit fb5ccfc

3 files changed

Lines changed: 7 additions & 0 deletions

File tree

Lib/test/test_bz2.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,9 @@ def test_decompress_after_data_error(self):
10411041
bzd = BZ2Decompressor()
10421042
with self.assertRaisesRegex(OSError, "Invalid data stream"):
10431043
bzd.decompress(data)
1044+
# Previously, a second call could crash due to internal inconsistency
1045+
self.assertFalse(bzd.needs_input)
1046+
self.assertFalse(bzd.eof)
10441047
with self.assertRaisesRegex(OSError, "Invalid data stream"):
10451048
bzd.decompress(b'\x00' * 18)
10461049

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix a possible stack buffer overflow in :mod:`bz2` when a
2+
:class:`bz2.BZ2Decompressor` is reused after a decompression error.
3+
The decompressor now becomes unusable after libbz2 reports an error.

Modules/_bz2module.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@ _bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data,
615615
PyErr_SetString(PyExc_EOFError, "End of stream already reached");
616616
}
617617
else if (self->bzerror) {
618+
// Re-entering BZ2_bzDecompress() after an error can write out of bounds.
618619
catch_bz2_error(self->bzerror);
619620
}
620621
else {

0 commit comments

Comments
 (0)