[Python-checkins] python/dist/src/Python bltinmodule.c,2.246.4.3,2.246.4.4
anthonybaxter@sourceforge.net
anthonybaxter@sourceforge.net
Mon, 29 Apr 2002 21:05:36 -0700
Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv11267/Python
Modified Files:
Tag: release22-maint
bltinmodule.c
Log Message:
backport tim_one's patch:
Repair widespread misuse of _PyString_Resize. Since it's clear people
don't understand how this function works, also beefed up the docs. The
most common usage error is of this form (often spread out across gotos):
if (_PyString_Resize(&s, n) < 0) {
Py_DECREF(s);
s = NULL;
goto outtahere;
}
The error is that if _PyString_Resize runs out of memory, it automatically
decrefs the input string object s (which also deallocates it, since its
refcount must be 1 upon entry), and sets s to NULL. So if the "if"
branch ever triggers, it's an error to call Py_DECREF(s): s is already
NULL! A correct way to write the above is the simpler (and intended)
if (_PyString_Resize(&s, n) < 0)
goto outtahere;
Bugfix candidate.
Original patch(es):
python/dist/src/Python/bltinmodule.c:2.253
Index: bltinmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v
retrieving revision 2.246.4.3
retrieving revision 2.246.4.4
diff -C2 -d -r2.246.4.3 -r2.246.4.4
*** bltinmodule.c 8 Apr 2002 13:29:00 -0000 2.246.4.3
--- bltinmodule.c 30 Apr 2002 04:05:33 -0000 2.246.4.4
***************
*** 2001,2006 ****
}
! if (j < len && _PyString_Resize(&result, j) < 0)
! return NULL;
return result;
--- 2001,2006 ----
}
! if (j < len)
! _PyString_Resize(&result, j);
return result;