diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-11-27 00:42:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-27 00:42:00 (GMT) |
commit | 57100c86baa8451a568348646834380cd425b858 (patch) | |
tree | a6a3a5c625047986ef5826639b52ce4094918d8a | |
parent | 3dcbe01dc5236fb77d8c0133fb7e6bdd0754768a (diff) | |
download | cpython-57100c86baa8451a568348646834380cd425b858.zip cpython-57100c86baa8451a568348646834380cd425b858.tar.gz cpython-57100c86baa8451a568348646834380cd425b858.tar.bz2 |
[3.10] bpo-41735: Fix thread lock in zlib.Decompress.flush() may go wrong (GH-29587) (GH-29811)
* Fix thread lock in zlib.Decompress.flush() may go wrong
Getting `.unconsumed_tail` before acquiring the thread lock may mix up decompress state.
(cherry picked from commit 7edb6270a78c695e4c2ae2432797dc18105374fc)
Co-authored-by: Ma Lin <animalize@users.noreply.github.com>
Automerge-Triggered-By: GH:gpshead
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-11-16-18-13-49.bpo-41735.D72UY1.rst | 1 | ||||
-rw-r--r-- | Modules/zlibmodule.c | 5 |
2 files changed, 4 insertions, 2 deletions
diff --git a/Misc/NEWS.d/next/Library/2021-11-16-18-13-49.bpo-41735.D72UY1.rst b/Misc/NEWS.d/next/Library/2021-11-16-18-13-49.bpo-41735.D72UY1.rst new file mode 100644 index 0000000..101da0e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-11-16-18-13-49.bpo-41735.D72UY1.rst @@ -0,0 +1 @@ +Fix thread lock in ``zlib.Decompress.flush()`` method before ``PyObject_GetBuffer``. diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index 68de701..a6940f2 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1266,12 +1266,13 @@ zlib_Decompress_flush_impl(compobject *self, PyTypeObject *cls, return NULL; } + ENTER_ZLIB(self); + if (PyObject_GetBuffer(self->unconsumed_tail, &data, PyBUF_SIMPLE) == -1) { + LEAVE_ZLIB(self); return NULL; } - ENTER_ZLIB(self); - self->zst.next_in = data.buf; ibuflen = data.len; |