From a78bff6e6278543173b75eeff5dde70ab1e09a94 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 22 Jun 2026 10:26:48 +1000 Subject: [PATCH] Do not DECREF tuple until tuple items are no longer used --- src/encode.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/encode.c b/src/encode.c index 476e5ea420d..c0c956046a9 100644 --- a/src/encode.c +++ b/src/encode.c @@ -774,7 +774,6 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { key = PyTuple_GET_ITEM(item, 0); key_int = (int)PyLong_AsLong(key); value = PyTuple_GET_ITEM(item, 1); - Py_DECREF(item); status = 0; is_core_tag = 0; @@ -792,6 +791,7 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { PyObject *tag_type; if (PyDict_GetItemRef(types, key, &tag_type) < 0) { Py_DECREF(encoder); + Py_DECREF(item); return NULL; // Exception has been already set } if (tag_type) { @@ -852,6 +852,7 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { key_int == TIFFTAG_INKNAMES) { if (!PyBytes_Check(value)) { Py_DECREF(encoder); + Py_DECREF(item); PyErr_SetString(PyExc_ValueError, "Incorrect tag value type"); return NULL; } @@ -870,6 +871,7 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { int stride = 256; if (len != 768) { Py_DECREF(encoder); + Py_DECREF(item); PyErr_SetString( PyExc_ValueError, "Requiring 768 items for Colormap" ); @@ -1030,6 +1032,7 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { } else if (type == TIFF_ASCII) { if (!PyBytes_Check(value)) { Py_DECREF(encoder); + Py_DECREF(item); PyErr_SetString(PyExc_ValueError, "Incorrect tag value type"); return NULL; } @@ -1054,6 +1057,7 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { ); } } + Py_DECREF(item); if (!status) { TRACE(("Error setting Field\n")); Py_DECREF(encoder);