Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 11919:a851ef326d93 legacy-trunk
string_join(): Fix memory leaks discovered by Charles Waldman (and a
few other paths through the function that leaked).
| author | Barry Warsaw <barry@python.org> |
|---|---|
| date | Mon, 06 Mar 2000 14:52:18 +0000 |
| parents | dc65c5f6ad7c |
| children | 421b1620f582 |
line wrap: on
line diff
--- a/Objects/stringobject.c Mon Mar 06 14:43:20 2000 +0000 +++ b/Objects/stringobject.c Mon Mar 06 14:52:18 2000 +0000 @@ -709,8 +709,10 @@ goto finally; slen = PyString_GET_SIZE(sitem); while (reslen + slen + seplen >= sz) { - if (_PyString_Resize(&res, sz*2)) + if (_PyString_Resize(&res, sz*2)) { + Py_DECREF(sitem); goto finally; + } sz *= 2; p = PyString_AsString(res) + reslen; } @@ -720,6 +722,7 @@ reslen += seplen; } memcpy(p, PyString_AS_STRING(sitem), slen); + Py_DECREF(sitem); p += slen; reslen += slen; } @@ -728,14 +731,20 @@ for (i = 0; i < seqlen; i++) { PyObject *item = PySequence_GetItem(seq, i); PyObject *sitem; - if (!item || !(sitem = PyObject_Str(item))) { - Py_XDECREF(item); + + if (!item) goto finally; - } + sitem = PyObject_Str(item); + Py_DECREF(item); + if (!sitem) + goto finally; + slen = PyString_GET_SIZE(sitem); while (reslen + slen + seplen >= sz) { - if (_PyString_Resize(&res, sz*2)) + if (_PyString_Resize(&res, sz*2)) { + Py_DECREF(sitem); goto finally; + } sz *= 2; p = PyString_AsString(res) + reslen; } @@ -745,6 +754,7 @@ reslen += seplen; } memcpy(p, PyString_AS_STRING(sitem), slen); + Py_DECREF(sitem); p += slen; reslen += slen; }
