Staging
v0.8.1
https://github.com/python/cpython
Revision 88c646e99e6969b0933f2e4d8bedd5ef530f2412 authored by Anthony Baxter on 30 April 2002, 03:58:47 UTC, committed by Anthony Baxter on 30 April 2002, 03:58:47 UTC
[Re-did unicodeobject.c - it's changed a lot since 2.1 :) Pretty confident
that it's correct]

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
1 parent b64e6dc
History
Tip revision: 88c646e99e6969b0933f2e4d8bedd5ef530f2412 authored by Anthony Baxter on 30 April 2002, 03:58:47 UTC
backport tim_one's patch:
Tip revision: 88c646e
File Mode Size
.cvsignore -rw-r--r-- 17 bytes
abstract.c -rw-r--r-- 34.2 KB
bufferobject.c -rw-r--r-- 11.1 KB
cellobject.c -rw-r--r-- 2.3 KB
classobject.c -rw-r--r-- 48.2 KB
cobject.c -rw-r--r-- 3.6 KB
complexobject.c -rw-r--r-- 13.9 KB
dictobject.c -rw-r--r-- 33.6 KB
fileobject.c -rw-r--r-- 33.9 KB
floatobject.c -rw-r--r-- 17.9 KB
frameobject.c -rw-r--r-- 10.0 KB
funcobject.c -rw-r--r-- 8.1 KB
intobject.c -rw-r--r-- 19.4 KB
listobject.c -rw-r--r-- 40.5 KB
longobject.c -rw-r--r-- 38.8 KB
methodobject.c -rw-r--r-- 5.0 KB
moduleobject.c -rw-r--r-- 5.7 KB
object.c -rw-r--r-- 35.5 KB
obmalloc.c -rw-r--r-- 22.2 KB
rangeobject.c -rw-r--r-- 6.5 KB
sliceobject.c -rw-r--r-- 4.1 KB
stringobject.c -rw-r--r-- 76.0 KB
tupleobject.c -rw-r--r-- 12.5 KB
typeobject.c -rw-r--r-- 1.3 KB
unicodectype.c -rw-r--r-- 8.5 KB
unicodeobject.c -rw-r--r-- 123.3 KB
unicodetype_db.h -rw-r--r-- 37.0 KB
xxobject.c -rw-r--r-- 2.4 KB

back to top