gh-148286: Fix UB in ZstdDecompressor.unused_data when a frame is decompressed in one call (#153258)

Co-authored-by: Emma Smith <emma@emmatyping.dev>
This commit is contained in:
Stan UlbrychandEmma Smith authored and GitHub committed 2026-07-13 09:02:02 +02:00
1 parent ed716551e1
commit adebb68153
3 files changed
+11 -6

No files matched your search

@@ -0,0 +1,3 @@
Fix undefined behavior in
:attr:`compression.zstd.ZstdDecompressor.unused_data` when a complete frame
was decompressed in a single call.
+8 -3
View File
@@ -594,9 +594,14 @@ _zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor *self)
}
else {
if (self->unused_data == NULL) {
self->unused_data = PyBytes_FromStringAndSize(
self->input_buffer + self->in_begin,
self->in_end - self->in_begin);
if (self->input_buffer == NULL) {
self->unused_data = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
else {
self->unused_data = PyBytes_FromStringAndSize(
self->input_buffer + self->in_begin,
self->in_end - self->in_begin);
}
ret = self->unused_data;
Py_XINCREF(ret);
}
-3
View File
@@ -15,8 +15,5 @@ shift-base:Modules/_ctypes/cfield.c
# Modules/_ctypes/cfield.c:640:1: runtime error: signed integer overflow: -2147483648 - 1 cannot be represented in type 'int'
signed-integer-overflow:Modules/_ctypes/cfield.c
# Modules/_zstd/decompressor.c:598:56: runtime error: applying non-zero offset 18446744073709551615 to null pointer
pointer-overflow:Modules/_zstd/decompressor.c
# Modules/_io/stringio.c:350:24: runtime error: addition of unsigned offset to 0x7fd01ec25850 overflowed to 0x7fd01ec2584c
pointer-overflow:Modules/_io/stringio.c