]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-111251: Fix error checking in _blake2 module init (#111252)
authorNikita Sobolev <mail@sobolevn.me>
Wed, 25 Oct 2023 06:32:46 +0000 (09:32 +0300)
committerGitHub <noreply@github.com>
Wed, 25 Oct 2023 06:32:46 +0000 (08:32 +0200)
Introduce ADD_INT_CONST macro wrapper for PyModule_AddIntConstant()

Misc/NEWS.d/next/Library/2023-10-24-12-09-46.gh-issue-111251.urFYtn.rst [new file with mode: 0644]
Modules/_blake2/blake2module.c

diff --git a/Misc/NEWS.d/next/Library/2023-10-24-12-09-46.gh-issue-111251.urFYtn.rst b/Misc/NEWS.d/next/Library/2023-10-24-12-09-46.gh-issue-111251.urFYtn.rst
new file mode 100644 (file)
index 0000000..3a87cb2
--- /dev/null
@@ -0,0 +1 @@
+Fix :mod:`_blake2` not checking for errors when initializing.
index 0d1d88c660368471ab922dc2a31fdb296e3d2d07..5df9fd3df493eebd6a1a1e0a174083ac078a2208 100644 (file)
@@ -74,6 +74,12 @@ _blake2_free(void *module)
     Py_DECREF(x); \
 } while(0)
 
+#define ADD_INT_CONST(NAME, VALUE) do { \
+    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) { \
+        return -1; \
+    } \
+} while (0)
+
 static int
 blake2_exec(PyObject *m)
 {
@@ -95,10 +101,10 @@ blake2_exec(PyObject *m)
     ADD_INT(d, "MAX_KEY_SIZE", BLAKE2B_KEYBYTES);
     ADD_INT(d, "MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
 
-    PyModule_AddIntConstant(m, "BLAKE2B_SALT_SIZE", BLAKE2B_SALTBYTES);
-    PyModule_AddIntConstant(m, "BLAKE2B_PERSON_SIZE", BLAKE2B_PERSONALBYTES);
-    PyModule_AddIntConstant(m, "BLAKE2B_MAX_KEY_SIZE", BLAKE2B_KEYBYTES);
-    PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
+    ADD_INT_CONST("BLAKE2B_SALT_SIZE", BLAKE2B_SALTBYTES);
+    ADD_INT_CONST("BLAKE2B_PERSON_SIZE", BLAKE2B_PERSONALBYTES);
+    ADD_INT_CONST("BLAKE2B_MAX_KEY_SIZE", BLAKE2B_KEYBYTES);
+    ADD_INT_CONST("BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
 
     /* BLAKE2s */
     st->blake2s_type = (PyTypeObject *)PyType_FromModuleAndSpec(
@@ -117,14 +123,17 @@ blake2_exec(PyObject *m)
     ADD_INT(d, "MAX_KEY_SIZE", BLAKE2S_KEYBYTES);
     ADD_INT(d, "MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES);
 
-    PyModule_AddIntConstant(m, "BLAKE2S_SALT_SIZE", BLAKE2S_SALTBYTES);
-    PyModule_AddIntConstant(m, "BLAKE2S_PERSON_SIZE", BLAKE2S_PERSONALBYTES);
-    PyModule_AddIntConstant(m, "BLAKE2S_MAX_KEY_SIZE", BLAKE2S_KEYBYTES);
-    PyModule_AddIntConstant(m, "BLAKE2S_MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES);
+    ADD_INT_CONST("BLAKE2S_SALT_SIZE", BLAKE2S_SALTBYTES);
+    ADD_INT_CONST("BLAKE2S_PERSON_SIZE", BLAKE2S_PERSONALBYTES);
+    ADD_INT_CONST("BLAKE2S_MAX_KEY_SIZE", BLAKE2S_KEYBYTES);
+    ADD_INT_CONST("BLAKE2S_MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES);
 
     return 0;
 }
 
+#undef ADD_INT
+#undef ADD_INT_CONST
+
 static PyModuleDef_Slot _blake2_slots[] = {
     {Py_mod_exec, blake2_exec},
     {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},