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

``