diff options
author | Georg Brandl <georg@python.org> | 2007-03-13 12:34:35 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2007-03-13 12:34:35 (GMT) |
commit | d6e73c1785aeee14c31a11171732f60ab5d852a5 (patch) | |
tree | 42fdf37dd55c17008896740c06eee59b8d98fc44 /Modules | |
parent | 1300831c48770fb75ab05ada6b6a8ab9b68926a3 (diff) | |
download | cpython-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.c | 21 |
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; } } |