]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-116738: Align bz2 unused_data getter to lzma implementation (GH-144351)
authorAlper <alperyoney@fb.com>
Sat, 11 Apr 2026 21:13:51 +0000 (14:13 -0700)
committerGitHub <noreply@github.com>
Sat, 11 Apr 2026 21:13:51 +0000 (14:13 -0700)
Align bz2 unused_data getter to lzma

Modules/_bz2module.c

index 7b8cbf3ed961844980f6bee1da68194261e0177e..d6c5c39ff9102ab28312b20dda71cfc9805f5e6c 100644 (file)
@@ -524,10 +524,12 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length)
     if (d->eof) {
         FT_ATOMIC_STORE_CHAR_RELAXED(d->needs_input, 0);
         if (d->bzs_avail_in_real > 0) {
-            Py_XSETREF(d->unused_data,
-                      PyBytes_FromStringAndSize(bzs->next_in, d->bzs_avail_in_real));
-            if (d->unused_data == NULL)
+            PyObject *unused_data = PyBytes_FromStringAndSize(
+                bzs->next_in, d->bzs_avail_in_real);
+            if (unused_data == NULL) {
                 goto error;
+            }
+            Py_XSETREF(d->unused_data, unused_data);
         }
     }
     else if (d->bzs_avail_in_real == 0) {
@@ -687,12 +689,13 @@ static PyObject *
 BZ2Decompressor_unused_data_get(PyObject *op, void *Py_UNUSED(ignored))
 {
     BZ2Decompressor *self = _BZ2Decompressor_CAST(op);
+    if (!FT_ATOMIC_LOAD_CHAR_RELAXED(self->eof)) {
+        return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
+    }
     PyMutex_Lock(&self->mutex);
-    PyObject *result = Py_XNewRef(self->unused_data);
+    assert(self->unused_data != NULL);
+    PyObject *result = Py_NewRef(self->unused_data);
     PyMutex_Unlock(&self->mutex);
-    if (result == NULL) {
-        PyErr_SetString(PyExc_AttributeError, "unused_data");
-    }
     return result;
 }