From 84ac9127e9d873a683f0cdec134a60e2e0ffd7b9 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Sun, 9 Apr 2023 22:00:22 +0200 Subject: [PATCH] gh-83004: Harden winsound init (#103385) --- PC/winsound.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/PC/winsound.c b/PC/winsound.c index 65025ddc5e1f518..bae8e4497957334 100644 --- a/PC/winsound.c +++ b/PC/winsound.c @@ -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; }