From dacd5d6eb9ee5486fac6de4b7a575a33fe3a5e2d Mon Sep 17 00:00:00 2001 From: nulano Date: Tue, 24 May 2022 16:36:30 +0100 Subject: [PATCH] add decref calls to imagingft to fix #6321 --- src/_imagingft.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/_imagingft.c b/src/_imagingft.c index 8f19b763c5c..7dc50b47438 100644 --- a/src/_imagingft.c +++ b/src/_imagingft.c @@ -303,7 +303,7 @@ text_layout_raqm( goto failed; } - len = PySequence_Size(seq); + len = PySequence_Fast_GET_SIZE(seq); for (j = 0; j < len; j++) { PyObject *item = PySequence_Fast_GET_ITEM(seq, j); char *feature = NULL; @@ -311,23 +311,26 @@ text_layout_raqm( PyObject *bytes; if (!PyUnicode_Check(item)) { + Py_DECREF(seq); PyErr_SetString(PyExc_TypeError, "expected a string"); goto failed; } - - if (PyUnicode_Check(item)) { - bytes = PyUnicode_AsUTF8String(item); - if (bytes == NULL) { - goto failed; - } - feature = PyBytes_AS_STRING(bytes); - size = PyBytes_GET_SIZE(bytes); + bytes = PyUnicode_AsUTF8String(item); + if (bytes == NULL) { + Py_DECREF(seq); + goto failed; } + feature = PyBytes_AS_STRING(bytes); + size = PyBytes_GET_SIZE(bytes); if (!raqm_add_font_feature(rq, feature, size)) { + Py_DECREF(seq); + Py_DECREF(bytes); PyErr_SetString(PyExc_ValueError, "raqm_add_font_feature() failed"); goto failed; } + Py_DECREF(bytes); } + Py_DECREF(seq); } if (!raqm_set_freetype_face(rq, self->face)) {