]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
backport tim_one's patch:
authorAnthony Baxter <anthonybaxter@gmail.com>
Tue, 30 Apr 2002 03:41:53 +0000 (03:41 +0000)
committerAnthony Baxter <anthonybaxter@gmail.com>
Tue, 30 Apr 2002 03:41:53 +0000 (03:41 +0000)
commit3864a45cd3a142ef168ffb69de1b407fbeda80bf
treeef14c3ff7c5b2ac6158a550d03af656b7f222ce0
parent07fb92a86f4428a0d1d827b6b18101afe77cdd15
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/Objects/fileobject.c:2.161
python/dist/src/Objects/stringobject.c:2.161
python/dist/src/Objects/unicodeobject.c:2.147
Objects/fileobject.c
Objects/stringobject.c
Objects/unicodeobject.c