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.
This commit is contained in:
Marc-André Lemburg 2001-09-20 17:22:58 +00:00
parent 5e89bd656f
commit 3508e30861
2 changed files with 11 additions and 2 deletions

View File

@ -1,5 +1,4 @@
test_unicode
* <built-in method join of unicode object at 0x81b3ba0> u' ' <class exceptions.TypeError at 0x80fac4c> u'7 hello 123'
Testing Unicode comparisons... done.
Testing Unicode contains method... done.
Testing Unicode formatting strings... done.

View File

@ -3197,6 +3197,14 @@ PyObject *PyUnicode_Join(PyObject *separator,
}
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);
item = v;
@ -3205,8 +3213,10 @@ PyObject *PyUnicode_Join(PyObject *separator,
}
itemlen = PyUnicode_GET_SIZE(item);
while (reslen + itemlen + seplen >= sz) {
if (_PyUnicode_Resize(&res, sz*2))
if (_PyUnicode_Resize(&res, sz*2)) {
Py_DECREF(item);
goto onError;
}
sz *= 2;
p = PyUnicode_AS_UNICODE(res) + reslen;
}