Commit bf325830 authored by Barry Warsaw's avatar Barry Warsaw

string_join(): Fix memory leaks discovered by Charles Waldman (and a

few other paths through the function that leaked).
parent 7f3cfd50
......@@ -709,8 +709,10 @@ string_join(self, args)
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 @@ string_join(self, args)
reslen += seplen;
}
memcpy(p, PyString_AS_STRING(sitem), slen);
Py_DECREF(sitem);
p += slen;
reslen += slen;
}
......@@ -728,14 +731,20 @@ string_join(self, args)
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 @@ string_join(self, args)
reslen += seplen;
}
memcpy(p, PyString_AS_STRING(sitem), slen);
Py_DECREF(sitem);
p += slen;
reslen += slen;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment