]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-83004: Harden winsound init (#103385)
authorErlend E. Aasland <erlend.aasland@protonmail.com>
Sun, 9 Apr 2023 20:00:22 +0000 (22:00 +0200)
committerGitHub <noreply@github.com>
Sun, 9 Apr 2023 20:00:22 +0000 (22:00 +0200)
PC/winsound.c

index 65025ddc5e1f518626722a7e4a9eaafbe085d954..bae8e449795733442161b9d0216b58a2a74f8535 100644 (file)
@@ -202,19 +202,11 @@ static struct PyMethodDef sound_methods[] =
     {NULL,  NULL}
 };
 
-static void
-add_define(PyObject *dict, const char *key, long value)
-{
-    PyObject *k = PyUnicode_FromString(key);
-    PyObject *v = PyLong_FromLong(value);
-    if (v && k) {
-        PyDict_SetItem(dict, k, v);
-    }
-    Py_XDECREF(k);
-    Py_XDECREF(v);
-}
-
-#define ADD_DEFINE(tok) add_define(dict,#tok,tok)
+#define ADD_DEFINE(CONST) do {                                  \
+    if (PyModule_AddIntConstant(module, #CONST, CONST) < 0) {   \
+        goto error;                                             \
+    }                                                           \
+} while (0)
 
 
 static struct PyModuleDef winsoundmodule = {
@@ -232,11 +224,10 @@ static struct PyModuleDef winsoundmodule = {
 PyMODINIT_FUNC
 PyInit_winsound(void)
 {
-    PyObject *dict;
     PyObject *module = PyModule_Create(&winsoundmodule);
-    if (module == NULL)
+    if (module == NULL) {
         return NULL;
-    dict = PyModule_GetDict(module);
+    }
 
     ADD_DEFINE(SND_ASYNC);
     ADD_DEFINE(SND_NODEFAULT);
@@ -254,5 +245,12 @@ PyInit_winsound(void)
     ADD_DEFINE(MB_ICONEXCLAMATION);
     ADD_DEFINE(MB_ICONHAND);
     ADD_DEFINE(MB_ICONQUESTION);
+
+#undef ADD_DEFINE
+
     return module;
+
+error:
+    Py_DECREF(module);
+    return NULL;
 }