https://github.com/python/cpython/commit/575174ee7824d5d25fabbc0d5255c031d6b4f6f5 commit: 575174ee7824d5d25fabbc0d5255c031d6b4f6f5 branch: 3.14 author: Miss Islington (bot) <[email protected]> committer: encukou <[email protected]> date: 2025-12-15T15:03:57+01:00 summary:
[3.14] gh-142595: add type check for namedtuple call during decimal initialization (GH-142608) (GH-142623) (cherry picked from commit be5e0dcdedb63185aaa3e2f711d14dc828cb3640) Co-authored-by: Sergey B Kirpichev <[email protected]> files: A Misc/NEWS.d/next/Library/2025-12-12-02-56-26.gh-issue-142595.wHvTqq.rst M Modules/_decimal/_decimal.c diff --git a/Misc/NEWS.d/next/Library/2025-12-12-02-56-26.gh-issue-142595.wHvTqq.rst b/Misc/NEWS.d/next/Library/2025-12-12-02-56-26.gh-issue-142595.wHvTqq.rst new file mode 100644 index 00000000000000..987e1ae8354b18 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-12-12-02-56-26.gh-issue-142595.wHvTqq.rst @@ -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. diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 602b23cfca8945..49dc45a4aff5c7 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -6040,10 +6040,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); _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
