diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-31 06:31:41 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-31 06:31:41 (GMT) |
commit | ecf40c1dce96ec2db49a9d95bd0df94cb6bce32f (patch) | |
tree | 659c25377f1dc32d21f4e1c0c9bb4d4e3101cbb1 /Modules | |
parent | 4eebf8477a20b256eccfbcd0fd9ef144f4c7e2af (diff) | |
parent | 88b221935895dd56ebae3a3299897ac9cd0c6eb2 (diff) | |
download | cpython-ecf40c1dce96ec2db49a9d95bd0df94cb6bce32f.zip cpython-ecf40c1dce96ec2db49a9d95bd0df94cb6bce32f.tar.gz cpython-ecf40c1dce96ec2db49a9d95bd0df94cb6bce32f.tar.bz2 |
Issue #27517: LZMA compressor and decompressor no longer raise exceptions if
given empty data twice. Patch by Benjamin Fogle.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_lzmamodule.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index f5dcea1..bb77552 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 |