Issue #18520: fix reference leak in _PySys_Init()

This commit is contained in:
Victor Stinner 2013-10-27 17:15:42 +01:00
parent 22da9677c2
commit 8fea252a50
1 changed files with 19 additions and 8 deletions

View File

@ -1573,7 +1573,7 @@ _PySys_Init(void)
if (m == NULL)
return NULL;
sysdict = PyModule_GetDict(m);
#define SET_SYS_FROM_STRING(key, value) \
#define SET_SYS_FROM_STRING_BORROW(key, value) \
do { \
int res; \
PyObject *v = (value); \
@ -1581,7 +1581,18 @@ _PySys_Init(void)
return NULL; \
res = PyDict_SetItemString(sysdict, key, v); \
if (res < 0) { \
Py_DECREF(v); \
return NULL; \
} \
} while (0)
#define SET_SYS_FROM_STRING(key, value) \
do { \
int res; \
PyObject *v = (value); \
if (v == NULL) \
return NULL; \
res = PyDict_SetItemString(sysdict, key, v); \
Py_DECREF(v); \
if (res < 0) { \
return NULL; \
} \
} while (0)
@ -1606,10 +1617,10 @@ _PySys_Init(void)
/* stdin/stdout/stderr are now set by pythonrun.c */
SET_SYS_FROM_STRING("__displayhook__",
PyDict_GetItemString(sysdict, "displayhook"));
SET_SYS_FROM_STRING("__excepthook__",
PyDict_GetItemString(sysdict, "excepthook"));
SET_SYS_FROM_STRING_BORROW("__displayhook__",
PyDict_GetItemString(sysdict, "displayhook"));
SET_SYS_FROM_STRING_BORROW("__excepthook__",
PyDict_GetItemString(sysdict, "excepthook"));
SET_SYS_FROM_STRING("version",
PyUnicode_FromString(Py_GetVersion()));
SET_SYS_FROM_STRING("hexversion",
@ -1679,9 +1690,9 @@ _PySys_Init(void)
else {
Py_INCREF(warnoptions);
}
SET_SYS_FROM_STRING("warnoptions", warnoptions);
SET_SYS_FROM_STRING_BORROW("warnoptions", warnoptions);
SET_SYS_FROM_STRING("_xoptions", get_xoptions());
SET_SYS_FROM_STRING_BORROW("_xoptions", get_xoptions());
/* version_info */
if (VersionInfoType.tp_name == NULL) {