https://github.com/python/cpython/commit/02844c83b08873ba5871175fdd9d909ae0ed0f4f
commit: 02844c83b08873ba5871175fdd9d909ae0ed0f4f
branch: main
author: Bénédikt Tran <[email protected]>
committer: picnixz <[email protected]>
date: 2026-10-19T11:48:25-07:00
summary:
gh-155830: properly initialize BLAKE-2 objects before GC tracking (#155831)
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 c69c4259b12666f..551ebd7cd052af9 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]