Skip to content

Commit b0842ed

Browse files
[3.14] gh-148286: Fix UB in ZstdDecompressor.unused_data when a frame is decompressed in one call (GH-153258) (#153645)
(cherry picked from commit adebb68) Co-authored-by: Emma Smith <emma@emmatyping.dev>
1 parent 368aebd commit b0842ed

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix undefined behavior in
2+
:attr:`compression.zstd.ZstdDecompressor.unused_data` when a complete frame
3+
was decompressed in a single call.

Modules/_zstd/decompressor.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,9 +594,14 @@ _zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor *self)
594594
}
595595
else {
596596
if (self->unused_data == NULL) {
597-
self->unused_data = PyBytes_FromStringAndSize(
598-
self->input_buffer + self->in_begin,
599-
self->in_end - self->in_begin);
597+
if (self->input_buffer == NULL) {
598+
self->unused_data = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
599+
}
600+
else {
601+
self->unused_data = PyBytes_FromStringAndSize(
602+
self->input_buffer + self->in_begin,
603+
self->in_end - self->in_begin);
604+
}
600605
ret = self->unused_data;
601606
Py_XINCREF(ret);
602607
}

0 commit comments

Comments
 (0)