From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 10 Dec 2025 16:07:59 +0000 (+0100) Subject: [3.14] gh-142433: Move deref to below the error when checking for laststring (GH... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36d4f67b3cc97df8fb46f15e300719cc02cc496f;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-142433: Move deref to below the error when checking for laststring (GH-142402) (#142524) gh-142433: Move deref to below the error when checking for laststring (GH-142402) Move deref of laststring to below the error checking so the deref is applied after the object in strings is replaced. (cherry picked from commit 785268fdceb0d0fe217aed1d6e43e0231c0e50c3) Co-authored-by: AZero13 --- diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-08-17-34-57.gh-issue-142402.iV0ON3.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-08-17-34-57.gh-issue-142402.iV0ON3.rst new file mode 100644 index 000000000000..bad31470a255 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-08-17-34-57.gh-issue-142402.iV0ON3.rst @@ -0,0 +1,3 @@ +Fix reference counting when adjacent literal parts are merged while constructing +:class:`string.templatelib.Template`, preventing the displaced string object +from leaking. diff --git a/Objects/templateobject.c b/Objects/templateobject.c index ac38e4de435d..a05208e4c8fc 100644 --- a/Objects/templateobject.c +++ b/Objects/templateobject.c @@ -148,13 +148,14 @@ template_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (last_was_str) { PyObject *laststring = PyTuple_GET_ITEM(strings, stringsidx - 1); PyObject *concat = PyUnicode_Concat(laststring, item); - Py_DECREF(laststring); if (!concat) { Py_DECREF(strings); Py_DECREF(interpolations); return NULL; } + /* Replace laststring with concat */ PyTuple_SET_ITEM(strings, stringsidx - 1, concat); + Py_DECREF(laststring); } else { PyTuple_SET_ITEM(strings, stringsidx++, Py_NewRef(item));