summaryrefslogtreecommitdiff
path: root/Modules/_lzmamodule.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-10-31 08:31:13 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2016-10-31 08:31:13 +0200
commit88b221935895dd56ebae3a3299897ac9cd0c6eb2 (patch)
treefc6f8764566d5a5e1594002b37b74d019f155ed4 /Modules/_lzmamodule.c
parent13c8f3266a09e19c3c89c118b46b4205bc2a0082 (diff)
parent04f17f103afcee73c65709252b0dba6411df7665 (diff)
downloadcpython-git-88b221935895dd56ebae3a3299897ac9cd0c6eb2.tar.gz
Issue #27517: LZMA compressor and decompressor no longer raise exceptions if
given empty data twice. Patch by Benjamin Fogle.
Diffstat (limited to 'Modules/_lzmamodule.c')
-rw-r--r--Modules/_lzmamodule.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
index f5dcea19f1..bb77552b67 100644
--- a/Modules/_lzmamodule.c
+++ b/Modules/_lzmamodule.c
@@ -521,6 +521,8 @@ compress(Compressor *c, uint8_t *data, size_t len, lzma_action action)
Py_BEGIN_ALLOW_THREADS
lzret = lzma_code(&c->lzs, action);
data_size = (char *)c->lzs.next_out - PyBytes_AS_STRING(result);
+ if (lzret == LZMA_BUF_ERROR && len == 0 && c->lzs.avail_out > 0)
+ lzret = LZMA_OK; /* That wasn't a real error */
Py_END_ALLOW_THREADS
if (catch_lzma_error(lzret))
goto error;
@@ -896,6 +898,9 @@ decompress_buf(Decompressor *d, Py_ssize_t max_length)
PyObject *result;
lzma_stream *lzs = &d->lzs;
+ if (lzs->avail_in == 0)
+ return PyBytes_FromStringAndSize(NULL, 0);
+
if (max_length < 0 || max_length >= INITIAL_BUFFER_SIZE)
result = PyBytes_FromStringAndSize(NULL, INITIAL_BUFFER_SIZE);
else