[Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.115,2.116

M.-A. Lemburg lemburg@users.sourceforge.net
Thu, 20 Sep 2001 10:23:00 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv10095/Objects

Modified Files:
	unicodeobject.c 
Log Message:
Fix Unicode .join() method to raise a TypeError for sequence
elements which are not Unicode objects or strings. (This matches
the string.join() behaviour.)

Fix a memory leak in the .join() method which occurs in case
the Unicode resize fails.

Restore the test_unicode output.



Index: unicodeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.115
retrieving revision 2.116
diff -C2 -d -r2.115 -r2.116
*** unicodeobject.c	2001/09/20 12:53:16	2.115
--- unicodeobject.c	2001/09/20 17:22:58	2.116
***************
*** 3198,3201 ****
--- 3198,3209 ----
  	if (!PyUnicode_Check(item)) {
  	    PyObject *v;
+ 	    if (!PyString_Check(item)) {
+ 		PyErr_Format(PyExc_TypeError,
+ 			     "sequence item %i: expected string or Unicode,"
+ 			     " %.80s found",
+ 			     i, item->ob_type->tp_name);
+ 		Py_DECREF(item);
+ 		goto onError;
+ 	    }
  	    v = PyUnicode_FromObject(item);
  	    Py_DECREF(item);
***************
*** 3206,3211 ****
  	itemlen = PyUnicode_GET_SIZE(item);
  	while (reslen + itemlen + seplen >= sz) {
! 	    if (_PyUnicode_Resize(&res, sz*2))
  		goto onError;
  	    sz *= 2;
  	    p = PyUnicode_AS_UNICODE(res) + reslen;
--- 3214,3221 ----
  	itemlen = PyUnicode_GET_SIZE(item);
  	while (reslen + itemlen + seplen >= sz) {
! 	    if (_PyUnicode_Resize(&res, sz*2)) {
! 		Py_DECREF(item);
  		goto onError;
+ 	    }
  	    sz *= 2;
  	    p = PyUnicode_AS_UNICODE(res) + reslen;