Commit 921842f2 authored by Guido van Rossum's avatar Guido van Rossum

Fixed resizestring() to work if reference tracing is turned on.

The realloc() call would move the list head without fixing the
pointers to in the the chain of allocated objects...
parent da0c6bdf
......@@ -296,24 +296,31 @@ resizestring(pv, newsize)
object **pv;
int newsize;
{
register stringobject *v;
v = (stringobject *) *pv;
register object *v;
register stringobject *sv;
v = *pv;
if (!is_stringobject(v) || v->ob_refcnt != 1) {
*pv = 0;
DECREF(v);
err_badcall();
return -1;
}
/* XXX UNREF/NEWREF interface should be more symmetrical */
#ifdef TRACE_REFS
--ref_total;
#endif
UNREF(v);
*pv = (object *)
realloc((char *)v,
sizeof(stringobject) + newsize * sizeof(char));
if (*pv == NULL) {
DECREF(v);
DEL(v);
err_nomem();
return -1;
}
v = (stringobject *) *pv;
v->ob_size = newsize;
v->ob_sval[newsize] = '\0';
NEWREF(*pv);
sv = (stringobject *) *pv;
sv->ob_size = newsize;
sv->ob_sval[newsize] = '\0';
return 0;
}
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