summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2007-03-13 12:34:35 (GMT)
committerGeorg Brandl <georg@python.org>2007-03-13 12:34:35 (GMT)
commitd6e73c1785aeee14c31a11171732f60ab5d852a5 (patch)
tree42fdf37dd55c17008896740c06eee59b8d98fc44 /Modules
parent1300831c48770fb75ab05ada6b6a8ab9b68926a3 (diff)
downloadcpython-d6e73c1785aeee14c31a11171732f60ab5d852a5.zip
cpython-d6e73c1785aeee14c31a11171732f60ab5d852a5.tar.gz
cpython-d6e73c1785aeee14c31a11171732f60ab5d852a5.tar.bz2
Bug #1622896: fix a rare corner case where the bz2 module raised an
error in spite of a succesful compression. (backport from rev. 54336)
Diffstat (limited to 'Modules')
-rw-r--r--Modules/bz2module.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/Modules/bz2module.c b/Modules/bz2module.c
index 7a7d6cb..9d92cf6 100644
--- a/Modules/bz2module.c
+++ b/Modules/bz2module.c
@@ -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;
}
}