Commit a47337fb authored by Georg Brandl's avatar Georg Brandl

Bug #1622896: fix a rare corner case where the bz2 module raised an

error in spite of a succesful compression.
parent c64e4021
......@@ -490,6 +490,9 @@ Library
Extension Modules
-----------------
- Bug #1622896: fix a rare corner case where the bz2 module raised an
error in spite of a succesful compression.
- Patch #1654417: make operator.{get,set,del}slice use the full range
of Py_ssize_t.
......
......@@ -1579,6 +1579,8 @@ BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
Util_CatchBZ2Error(bzerror);
goto error;
}
if (bzs->avail_in == 0)
break; /* no more input data */
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
if (_PyString_Resize(&ret, bufsize) < 0) {
......@@ -1588,8 +1590,6 @@ BZ2Comp_compress(BZ2CompObject *self, PyObject *args)
bzs->next_out = BUF(ret) + (BZS_TOTAL_OUT(bzs)
- totalout);
bzs->avail_out = bufsize - (bzs->next_out - BUF(ret));
} else if (bzs->avail_in == 0) {
break;
}
}
......@@ -1871,6 +1871,8 @@ BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
Util_CatchBZ2Error(bzerror);
goto error;
}
if (bzs->avail_in == 0)
break; /* no more input data */
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
if (_PyString_Resize(&ret, bufsize) < 0) {
......@@ -1881,8 +1883,6 @@ BZ2Decomp_decompress(BZ2DecompObject *self, PyObject *args)
bzs->next_out = BUF(ret) + (BZS_TOTAL_OUT(bzs)
- totalout);
bzs->avail_out = bufsize - (bzs->next_out - BUF(ret));
} else if (bzs->avail_in == 0) {
break;
}
}
......@@ -2160,6 +2160,13 @@ bz2_decompress(PyObject *self, PyObject *args)
Py_DECREF(ret);
return NULL;
}
if (bzs->avail_in == 0) {
BZ2_bzDecompressEnd(bzs);
PyErr_SetString(PyExc_ValueError,
"couldn't find end of stream");
Py_DECREF(ret);
return NULL;
}
if (bzs->avail_out == 0) {
bufsize = Util_NewBufferSize(bufsize);
if (_PyString_Resize(&ret, bufsize) < 0) {
......@@ -2169,12 +2176,6 @@ bz2_decompress(PyObject *self, PyObject *args)
}
bzs->next_out = BUF(ret) + BZS_TOTAL_OUT(bzs);
bzs->avail_out = bufsize - (bzs->next_out - BUF(ret));
} else if (bzs->avail_in == 0) {
BZ2_bzDecompressEnd(bzs);
PyErr_SetString(PyExc_ValueError,
"couldn't find end of stream");
Py_DECREF(ret);
return NULL;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment