[Python-checkins] python/dist/src/Python bltinmodule.c,2.252,2.253

tim_one@sourceforge.net tim_one@sourceforge.net
2002年4月27日 11:44:34 -0700


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;

AltStyle によって変換されたページ (->オリジナル) /