| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
…aching the thread state `_hashlib_HASH_hash()` set an exception when EVP_DigestUpdate() failed, but it is called inside a GIL-released region by `_hashlib.HASH.update()` and by the `_hashlib.HASH` constructor when the data exceeds HASHLIB_GIL_MINSIZE bytes. Setting the exception with the thread state detached crashed the interpreter instead of raising a ValueError. Only report the failure in `_hashlib_HASH_hash()` and set the exception in its callers once the thread state is re-attached. The OpenSSL error queue is per thread, so the exception message is unaffected.
|
Thanks @picnixz for the PR 🌮🎉.. I'm working now to backport this PR to: 3.14, 3.15. |
Sorry, something went wrong.
|
Sorry, @picnixz, I could not cleanly backport this to 3.14 due to a conflict. Please backport manually with cherry_picker, see the devguide for more information. cherry_picker 6fa2d645ea57120d1cbf38b45fc8ee2b5019090b 3.14 |
Sorry, something went wrong.
|
GH-159927 is a backport of this pull request to the 3.15 branch. |
Sorry, something went wrong.
|
GH-159937 is a backport of this pull request to the 3.14 branch. |
Sorry, something went wrong.
…taching the thread state (GH-159817) (#159937) When `EVP_DigestUpdate()` failed, `_hashlib_HASH_hash()` raised a Python exception, however, `_hashlib.HASH.update()` and the `_hashlib.HASH` constructor release the GIL before calling it when the data is larger than `HASHLIB_GIL_MINSIZE` bytes. `_hashlib_HASH_hash()` now only returns an error status and its callers raise the exception once they have re-attached the thread state. (cherry picked from commit 6fa2d64)
…taching the thread state (GH-159817) (#159927) gh-159811: Raise OpenSSL errors in `_hashlib.HASH` after re-attaching the thread state (GH-159817) When `EVP_DigestUpdate()` failed, `_hashlib_HASH_hash()` raised a Python exception, however, `_hashlib.HASH.update()` and the `_hashlib.HASH` constructor release the GIL before calling it when the data is larger than `HASHLIB_GIL_MINSIZE` bytes. `_hashlib_HASH_hash()` now only returns an error status and its callers raise the exception once they have re-attached the thread state. (cherry picked from commit 6fa2d64) Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
| Back | FazBrowse Home | New Git URL |
_hashlib_HASH_hash() set an exception when EVP_DigestUpdate() failed, but it is called inside a GIL-released region by _hashlib.HASH.update() and by the _hashlib.HASH constructor when the data exceeds HASHLIB_GIL_MINSIZE bytes. Setting the exception with the thread state detached crashes the interpreter instead of raising a ValueError.
Only report the failure in _hashlib_HASH_hash() and set the exception in its callers once the thread state is re-attached. The OpenSSL error queue is per thread, so the exception message is unaffected.
The _hashlib.HMAC counterpart is handled in #159818 as it only affects 3.15 and later, whereas this one should be backported to 3.13 and 3.14 as well.