Skip to content

Commit 637cc78

Browse files
committed
Improve unused_data getter
1 parent 2640d35 commit 637cc78

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

Modules/_lzmamodule.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,11 +1041,12 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length)
10411041
if (d->eof) {
10421042
FT_ATOMIC_STORE_CHAR_RELAXED(d->needs_input, 0);
10431043
if (lzs->avail_in > 0) {
1044-
Py_XSETREF(d->unused_data,
1045-
PyBytes_FromStringAndSize((char *)lzs->next_in, lzs->avail_in));
1046-
if (d->unused_data == NULL) {
1044+
PyObject *unused_data = PyBytes_FromStringAndSize(
1045+
(char *)lzs->next_in, lzs->avail_in);
1046+
if (unused_data == NULL) {
10471047
goto error;
10481048
}
1049+
Py_XSETREF(d->unused_data, unused_data);
10491050
}
10501051
}
10511052
else if (lzs->avail_in == 0) {
@@ -1319,12 +1320,13 @@ static PyObject *
13191320
Decompressor_unused_data_get(PyObject *op, void *Py_UNUSED(ignored))
13201321
{
13211322
Decompressor *self = Decompressor_CAST(op);
1323+
if (!FT_ATOMIC_LOAD_CHAR_RELAXED(self->eof)) {
1324+
return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
1325+
}
13221326
PyMutex_Lock(&self->mutex);
1323-
PyObject *result = Py_XNewRef(self->unused_data);
1327+
assert(self->unused_data != NULL);
1328+
PyObject *result = Py_NewRef(self->unused_data);
13241329
PyMutex_Unlock(&self->mutex);
1325-
if (result == NULL) {
1326-
PyErr_SetString(PyExc_AttributeError, "unused_data");
1327-
}
13281330
return result;
13291331
}
13301332

0 commit comments

Comments
 (0)