From 4904829dbf7d8867a5d8c89eeec2969a45448fd8 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Tue, 11 Jul 2000 03:28:17 +0000 Subject: [PATCH] fix two refcount bugs in new string_join implementation: 1. PySequence_Fast_GET_ITEM is a macro and borrows a reference 2. The seq returned from PySequence_Fast must be decref'd --- Objects/stringobject.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Objects/stringobject.c b/Objects/stringobject.c index fd0a570c5f2..2667fa9e70f 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -774,22 +774,17 @@ string_join(PyStringObject *self, PyObject *args) if (!PyString_Check(item)){ if (PyUnicode_Check(item)) { Py_DECREF(res); - Py_DECREF(item); return PyUnicode_Join((PyObject *)self, seq); } PyErr_Format(PyExc_TypeError, "sequence item %i: expected string, %.80s found", i, item->ob_type->tp_name); - Py_DECREF(item); - Py_DECREF(seq); goto finally; } slen = PyString_GET_SIZE(item); while (reslen + slen + seplen >= sz) { if (_PyString_Resize(&res, sz*2)) { - Py_DECREF(item); - Py_DECREF(seq); goto finally; } sz *= 2; @@ -801,15 +796,16 @@ string_join(PyStringObject *self, PyObject *args) reslen += seplen; } memcpy(p, PyString_AS_STRING(item), slen); - Py_DECREF(item); p += slen; reslen += slen; } if (_PyString_Resize(&res, reslen)) goto finally; + Py_DECREF(seq); return res; finally: + Py_DECREF(seq); Py_DECREF(res); return NULL; }