Kaydet (Commit) ff4fddde authored tarafından Christian Heimes's avatar Christian Heimes

Add NULL checks to the initializer of the locale module

The _locale module was using old-style APIs to set numeric module
constants from macros. The new way requires less code and properly
checks for NULL.

CID 1295027
üst 45af0c83
...@@ -621,53 +621,34 @@ static struct PyModuleDef _localemodule = { ...@@ -621,53 +621,34 @@ static struct PyModuleDef _localemodule = {
PyMODINIT_FUNC PyMODINIT_FUNC
PyInit__locale(void) PyInit__locale(void)
{ {
PyObject *m, *d, *x; PyObject *m;
#ifdef HAVE_LANGINFO_H #ifdef HAVE_LANGINFO_H
int i; int i;
#endif #endif
m = PyModule_Create(&_localemodule); m = PyModule_Create(&_localemodule);
if (m == NULL) if (m == NULL)
return NULL; return NULL;
d = PyModule_GetDict(m);
x = PyLong_FromLong(LC_CTYPE);
PyDict_SetItemString(d, "LC_CTYPE", x);
Py_XDECREF(x);
x = PyLong_FromLong(LC_TIME);
PyDict_SetItemString(d, "LC_TIME", x);
Py_XDECREF(x);
x = PyLong_FromLong(LC_COLLATE);
PyDict_SetItemString(d, "LC_COLLATE", x);
Py_XDECREF(x);
x = PyLong_FromLong(LC_MONETARY); PyModule_AddIntMacro(m, LC_CTYPE);
PyDict_SetItemString(d, "LC_MONETARY", x); PyModule_AddIntMacro(m, LC_TIME);
Py_XDECREF(x); PyModule_AddIntMacro(m, LC_COLLATE);
PyModule_AddIntMacro(m, LC_MONETARY);
#ifdef LC_MESSAGES #ifdef LC_MESSAGES
x = PyLong_FromLong(LC_MESSAGES); PyModule_AddIntMacro(m, LC_MESSAGES);
PyDict_SetItemString(d, "LC_MESSAGES", x);
Py_XDECREF(x);
#endif /* LC_MESSAGES */ #endif /* LC_MESSAGES */
x = PyLong_FromLong(LC_NUMERIC); PyModule_AddIntMacro(m, LC_NUMERIC);
PyDict_SetItemString(d, "LC_NUMERIC", x); PyModule_AddIntMacro(m, LC_ALL);
Py_XDECREF(x); PyModule_AddIntMacro(m, CHAR_MAX);
x = PyLong_FromLong(LC_ALL);
PyDict_SetItemString(d, "LC_ALL", x);
Py_XDECREF(x);
x = PyLong_FromLong(CHAR_MAX);
PyDict_SetItemString(d, "CHAR_MAX", x);
Py_XDECREF(x);
Error = PyErr_NewException("locale.Error", NULL, NULL); Error = PyErr_NewException("locale.Error", NULL, NULL);
PyDict_SetItemString(d, "Error", Error); if (Error == NULL) {
Py_DECREF(m);
return NULL;
}
PyModule_AddObject(m, "Error", Error);
#ifdef HAVE_LANGINFO_H #ifdef HAVE_LANGINFO_H
for (i = 0; langinfo_constants[i].name; i++) { for (i = 0; langinfo_constants[i].name; i++) {
...@@ -675,6 +656,11 @@ PyInit__locale(void) ...@@ -675,6 +656,11 @@ PyInit__locale(void)
langinfo_constants[i].value); langinfo_constants[i].value);
} }
#endif #endif
if (PyErr_Occurred()) {
Py_DECREF(m);
return NULL;
}
return m; return m;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment