Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 13526:3686d12362b8 legacy-trunk
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
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Tue, 11 Jul 2000 03:28:17 +0000 |
| parents | 16e490462e6b |
| children | e848d6ed3eb9 |
line wrap: on
line diff
--- a/Objects/stringobject.c Mon Jul 10 22:41:30 2000 +0000 +++ b/Objects/stringobject.c Tue Jul 11 03:28:17 2000 +0000 @@ -774,22 +774,17 @@ 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 @@ 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; }
