https://github.com/python/cpython/commit/aa119b29d9e6fa2806a199348594b0983f5c07c5 commit: aa119b29d9e6fa2806a199348594b0983f5c07c5 branch: 3.15 author: Miss Islington (bot) <[email protected]> committer: picnixz <[email protected]> date: 2026-10-19T12:28:23-07:00 summary:
[3.15] gh-155830: properly initialize BLAKE-2 objects before GC tracking (GH-155831) (#159732) gh-155830: properly initialize BLAKE-2 objects before GC tracking (GH-155831) (cherry picked from commit 02844c83b08873ba5871175fdd9d909ae0ed0f4f) Co-authored-by: Bénédikt Tran <[email protected]> files: A Misc/NEWS.d/next/Library/2026-08-15-11-49-30.gh-issue-155830.cY5xgK.rst M Modules/blake2module.c diff --git a/Misc/NEWS.d/next/Library/2026-08-15-11-49-30.gh-issue-155830.cY5xgK.rst b/Misc/NEWS.d/next/Library/2026-08-15-11-49-30.gh-issue-155830.cY5xgK.rst new file mode 100644 index 000000000000000..9d6c2a82903d027 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-08-15-11-49-30.gh-issue-155830.cY5xgK.rst @@ -0,0 +1,2 @@ +:mod:`!_blake2`: Ensure that BLAKE-2 objects are correctly initialized +before being tracked by the garbage collector. Patch by Bénédikt Tran. diff --git a/Modules/blake2module.c b/Modules/blake2module.c index ac7265bb9d6836c..5ea64cb28885db9 100644 --- a/Modules/blake2module.c +++ b/Modules/blake2module.c @@ -392,6 +392,29 @@ new_Blake2Object(PyTypeObject *type) return NULL; } HASHLIB_INIT_MUTEX(self); + self->impl = type_to_impl(type); + // Ensure that the states are NULL-initialized in case of an error. + // See: py_blake2_clear() for more details. + switch (self->impl) { +#if _Py_HACL_CAN_COMPILE_VEC256 + case Blake2b_256: + self->blake2b_256_state = NULL; + break; +#endif +#if _Py_HACL_CAN_COMPILE_VEC128 + case Blake2s_128: + self->blake2s_128_state = NULL; + break; +#endif + case Blake2b: + self->blake2b_state = NULL; + break; + case Blake2s: + self->blake2s_state = NULL; + break; + default: + Py_UNREACHABLE(); + } PyObject_GC_Track(self); return self; @@ -553,30 +576,6 @@ py_blake2_new(PyTypeObject *type, PyObject *data, int digest_size, goto error; } - self->impl = type_to_impl(type); - // Ensure that the states are NULL-initialized in case of an error. - // See: py_blake2_clear() for more details. - switch (self->impl) { -#if _Py_HACL_CAN_COMPILE_VEC256 - case Blake2b_256: - self->blake2b_256_state = NULL; - break; -#endif -#if _Py_HACL_CAN_COMPILE_VEC128 - case Blake2s_128: - self->blake2s_128_state = NULL; - break; -#endif - case Blake2b: - self->blake2b_state = NULL; - break; - case Blake2s: - self->blake2s_state = NULL; - break; - default: - Py_UNREACHABLE(); - } - // Unlike the state types, the parameters share a single (client-friendly) // structure. if (py_blake2_validate_params(self, _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
