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;
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;