Mailing List Archive

python/dist/src/Python bltinmodule.c,2.252,2.253
Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv7685/python/Python

Modified Files:
bltinmodule.c
Log Message:
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.


Index: bltinmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v
retrieving revision 2.252
retrieving revision 2.253
diff -C2 -d -r2.252 -r2.253
*** bltinmodule.c 26 Apr 2002 19:40:55 -0000 2.252
--- bltinmodule.c 27 Apr 2002 18:44:32 -0000 2.253
***************
*** 1994,1999 ****
}

! if (j < len && _PyString_Resize(&result, j) < 0)
! return NULL;

return result;
--- 1994,1999 ----
}

! if (j < len)
! _PyString_Resize(&result, j);

return result;