Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5ed2f19

Browse files
gh-83004: Harden winreg init (#103386)
1 parentc3cd3d1 commit5ed2f19

File tree

1 file changed

+37
-28
lines changed

1 file changed

+37
-28
lines changed

‎PC/winreg.c‎

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2059,27 +2059,29 @@ static struct PyMethodDef winreg_methods[] = {
20592059
NULL,
20602060
};
20612061

2062-
staticvoid
2063-
insint(PyObject*d,char*name,longvalue)
2064-
{
2065-
PyObject*v=PyLong_FromLong(value);
2066-
if (!v||PyDict_SetItemString(d,name,v))
2067-
PyErr_Clear();
2068-
Py_XDECREF(v);
2069-
}
2070-
2071-
#defineADD_INT(val) insint(d, #val, val)
2062+
#defineADD_INT(VAL) do { \
2063+
if (PyModule_AddIntConstant(m, #VAL, VAL) < 0) { \
2064+
goto error; \
2065+
} \
2066+
} while (0)
20722067

2073-
staticvoid
2074-
inskey(PyObject*d,char*name,HKEYkey)
2068+
staticint
2069+
inskey(PyObject*mod,char*name,HKEYkey)
20752070
{
20762071
PyObject*v=PyLong_FromVoidPtr(key);
2077-
if (!v||PyDict_SetItemString(d,name,v))
2078-
PyErr_Clear();
2079-
Py_XDECREF(v);
2072+
if (v==NULL) {
2073+
return-1;
2074+
}
2075+
intrc=PyModule_AddObjectRef(mod,name,v);
2076+
Py_DECREF(v);
2077+
returnrc;
20802078
}
20812079

2082-
#defineADD_KEY(val) inskey(d, #val, val)
2080+
#defineADD_KEY(VAL) do { \
2081+
if (inskey(m, #VAL, VAL) < 0) { \
2082+
goto error; \
2083+
} \
2084+
} while (0)
20832085

20842086

20852087
staticstructPyModuleDefwinregmodule= {
@@ -2096,20 +2098,20 @@ static struct PyModuleDef winregmodule = {
20962098

20972099
PyMODINIT_FUNCPyInit_winreg(void)
20982100
{
2099-
PyObject*m,*d;
2100-
m=PyModule_Create(&winregmodule);
2101-
if (m==NULL)
2101+
PyObject*m=PyModule_Create(&winregmodule);
2102+
if (m==NULL) {
21022103
returnNULL;
2103-
d=PyModule_GetDict(m);
2104+
}
21042105
PyHKEY_Type.tp_doc=PyHKEY_doc;
2105-
if (PyType_Ready(&PyHKEY_Type)<0)
2106-
returnNULL;
2107-
if (PyDict_SetItemString(d,"HKEYType",
2108-
(PyObject*)&PyHKEY_Type)!=0)
2109-
returnNULL;
2110-
if (PyDict_SetItemString(d,"error",
2111-
PyExc_OSError)!=0)
2112-
returnNULL;
2106+
if (PyType_Ready(&PyHKEY_Type)<0) {
2107+
gotoerror;
2108+
}
2109+
if (PyModule_AddObjectRef(m,"HKEYType", (PyObject*)&PyHKEY_Type)<0) {
2110+
gotoerror;
2111+
}
2112+
if (PyModule_AddObjectRef(m,"error",PyExc_OSError)<0) {
2113+
gotoerror;
2114+
}
21132115

21142116
/* Add the relevant constants */
21152117
ADD_KEY(HKEY_CLASSES_ROOT);
@@ -2170,7 +2172,14 @@ PyMODINIT_FUNC PyInit_winreg(void)
21702172
ADD_INT(REG_RESOURCE_LIST);
21712173
ADD_INT(REG_FULL_RESOURCE_DESCRIPTOR);
21722174
ADD_INT(REG_RESOURCE_REQUIREMENTS_LIST);
2175+
2176+
#undef ADD_INT
2177+
21732178
returnm;
2179+
2180+
error:
2181+
Py_DECREF(m);
2182+
returnNULL;
21742183
}
21752184

21762185
#endif/* MS_WINDOWS_DESKTOP || MS_WINDOWS_SYSTEM || MS_WINDOWS_GAMES */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp