gh-142595: add type check for namedtuple call during decimal initialization (GH-142608)

This commit is contained in:
Sergey B Kirpichev 2025-12-12 13:47:45 +03:00 committed by GitHub
parent af2b3e98d8
commit be5e0dcded
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 4 deletions

View file

@ -0,0 +1,2 @@
Added type check during initialization of the :mod:`decimal` module to
prevent a crash in case of broken stdlib. Patch by Sergey B Kirpichev.

View file

@ -7753,10 +7753,14 @@ _decimal_exec(PyObject *m)
/* DecimalTuple */
ASSIGN_PTR(collections, PyImport_ImportModule("collections"));
ASSIGN_PTR(state->DecimalTuple, (PyTypeObject *)PyObject_CallMethod(collections,
"namedtuple", "(ss)", "DecimalTuple",
"sign digits exponent"));
obj = PyObject_CallMethod(collections, "namedtuple", "(ss)", "DecimalTuple",
"sign digits exponent");
if (!PyType_Check(obj)) {
PyErr_SetString(PyExc_TypeError,
"type is expected from namedtuple call");
goto error;
}
ASSIGN_PTR(state->DecimalTuple, (PyTypeObject *)obj);
ASSIGN_PTR(obj, PyUnicode_FromString("decimal"));
CHECK_INT(PyDict_SetItemString(state->DecimalTuple->tp_dict, "__module__", obj));
Py_CLEAR(obj);