Add NULL checks to the initializer of the locale module · python/cpython@ff4fddd (original) (raw)
`@@ -621,60 +621,46 @@ static struct PyModuleDef _localemodule = {
`
621
621
`PyMODINIT_FUNC
`
622
622
`PyInit__locale(void)
`
623
623
`{
`
624
``
`-
PyObject *m, *d, *x;
`
``
624
`+
PyObject *m;
`
625
625
`#ifdef HAVE_LANGINFO_H
`
626
626
`int i;
`
627
627
`#endif
`
628
628
``
629
629
`m = PyModule_Create(&_localemodule);
`
630
630
`if (m == NULL)
`
631
``
`-
return NULL;
`
632
``
-
633
``
`-
d = PyModule_GetDict(m);
`
634
``
-
635
``
`-
x = PyLong_FromLong(LC_CTYPE);
`
636
``
`-
PyDict_SetItemString(d, "LC_CTYPE", x);
`
637
``
`-
Py_XDECREF(x);
`
638
``
-
639
``
`-
x = PyLong_FromLong(LC_TIME);
`
640
``
`-
PyDict_SetItemString(d, "LC_TIME", x);
`
641
``
`-
Py_XDECREF(x);
`
642
``
-
643
``
`-
x = PyLong_FromLong(LC_COLLATE);
`
644
``
`-
PyDict_SetItemString(d, "LC_COLLATE", x);
`
645
``
`-
Py_XDECREF(x);
`
``
631
`+
return NULL;
`
646
632
``
647
``
`-
x = PyLong_FromLong(LC_MONETARY);
`
648
``
`-
PyDict_SetItemString(d, "LC_MONETARY", x);
`
649
``
`-
Py_XDECREF(x);
`
``
633
`+
PyModule_AddIntMacro(m, LC_CTYPE);
`
``
634
`+
PyModule_AddIntMacro(m, LC_TIME);
`
``
635
`+
PyModule_AddIntMacro(m, LC_COLLATE);
`
``
636
`+
PyModule_AddIntMacro(m, LC_MONETARY);
`
650
637
``
651
638
`#ifdef LC_MESSAGES
`
652
``
`-
x = PyLong_FromLong(LC_MESSAGES);
`
653
``
`-
PyDict_SetItemString(d, "LC_MESSAGES", x);
`
654
``
`-
Py_XDECREF(x);
`
``
639
`+
PyModule_AddIntMacro(m, LC_MESSAGES);
`
655
640
`#endif /* LC_MESSAGES */
`
656
641
``
657
``
`-
x = PyLong_FromLong(LC_NUMERIC);
`
658
``
`-
PyDict_SetItemString(d, "LC_NUMERIC", x);
`
659
``
`-
Py_XDECREF(x);
`
660
``
-
661
``
`-
x = PyLong_FromLong(LC_ALL);
`
662
``
`-
PyDict_SetItemString(d, "LC_ALL", x);
`
663
``
`-
Py_XDECREF(x);
`
664
``
-
665
``
`-
x = PyLong_FromLong(CHAR_MAX);
`
666
``
`-
PyDict_SetItemString(d, "CHAR_MAX", x);
`
667
``
`-
Py_XDECREF(x);
`
``
642
`+
PyModule_AddIntMacro(m, LC_NUMERIC);
`
``
643
`+
PyModule_AddIntMacro(m, LC_ALL);
`
``
644
`+
PyModule_AddIntMacro(m, CHAR_MAX);
`
668
645
``
669
646
`Error = PyErr_NewException("locale.Error", NULL, NULL);
`
670
``
`-
PyDict_SetItemString(d, "Error", Error);
`
``
647
`+
if (Error == NULL) {
`
``
648
`+
Py_DECREF(m);
`
``
649
`+
return NULL;
`
``
650
`+
}
`
``
651
`+
PyModule_AddObject(m, "Error", Error);
`
671
652
``
672
653
`#ifdef HAVE_LANGINFO_H
`
673
654
`for (i = 0; langinfo_constants[i].name; i++) {
`
674
655
`PyModule_AddIntConstant(m, langinfo_constants[i].name,
`
675
656
`langinfo_constants[i].value);
`
676
657
` }
`
677
658
`#endif
`
``
659
+
``
660
`+
if (PyErr_Occurred()) {
`
``
661
`+
Py_DECREF(m);
`
``
662
`+
return NULL;
`
``
663
`+
}
`
678
664
`return m;
`
679
665
`}
`
680
666
``