From: Pieter Eendebak Date: Thu, 5 Mar 2026 10:21:49 +0000 (+0100) Subject: gh-145376: Fix refleak and null pointer deref in unusual error path of datetime modul... X-Git-Tag: v3.15.0a7~61 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0eaf260d79f8547b02d8e80d760b11e821928fde;p=thirdparty%2FPython%2Fcpython.git gh-145376: Fix refleak and null pointer deref in unusual error path of datetime module (GH-145476) --- diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 8f64e572bd60..6b23a5c637a3 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3822,9 +3822,26 @@ iso_calendar_date_new_impl(PyTypeObject *type, int year, int week, return NULL; } - PyTuple_SET_ITEM(self, 0, PyLong_FromLong(year)); - PyTuple_SET_ITEM(self, 1, PyLong_FromLong(week)); - PyTuple_SET_ITEM(self, 2, PyLong_FromLong(weekday)); + PyObject *year_object = PyLong_FromLong(year); + if (year_object == NULL) { + Py_DECREF(self); + return NULL; + } + PyTuple_SET_ITEM(self, 0, year_object); + + PyObject *week_object = PyLong_FromLong(week); + if (week_object == NULL) { + Py_DECREF(self); + return NULL; + } + PyTuple_SET_ITEM(self, 1, week_object); + + PyObject *weekday_object = PyLong_FromLong(weekday); + if (weekday_object == NULL) { + Py_DECREF(self); + return NULL; + } + PyTuple_SET_ITEM(self, 2, weekday_object); return (PyObject *)self; } @@ -6891,9 +6908,9 @@ datetime_datetime_astimezone_impl(PyDateTime_DateTime *self, goto naive; } else if (!PyDelta_Check(offset)) { + PyErr_Format(PyExc_TypeError, "utcoffset() returned %T," + " expected timedelta or None", offset); Py_DECREF(offset); - PyErr_Format(PyExc_TypeError, "utcoffset() returned %.200s," - " expected timedelta or None", Py_TYPE(offset)->tp_name); return NULL; } /* result = self - offset */