diff Objects/stringobject.c @ 33246:03440272028c legacy-trunk

SF Patch #1007087: Return new string for single subclass joins (Bug #1001011) (Patch contributed by Nick Coghlan.) Now joining string subtypes will always return a string. Formerly, if there were only one item, it was returned unchanged.
author Raymond Hettinger <python@rcn.com>
date Mon, 23 Aug 2004 23:23:54 +0000
parents 8607ac2f81c8
children 10512ceba30c
line wrap: on
line diff
--- a/Objects/stringobject.c	Mon Aug 23 22:42:55 2004 +0000
+++ b/Objects/stringobject.c	Mon Aug 23 23:23:54 2004 +0000
@@ -1618,22 +1618,18 @@
 	}
 	if (seqlen == 1) {
 		item = PySequence_Fast_GET_ITEM(seq, 0);
-		if (!PyString_Check(item) && !PyUnicode_Check(item)) {
-			PyErr_Format(PyExc_TypeError,
-				     "sequence item 0: expected string,"
-				     " %.80s found",
-				     item->ob_type->tp_name);
+		if (PyString_CheckExact(item) || PyUnicode_CheckExact(item)) {
+			Py_INCREF(item);
 			Py_DECREF(seq);
-			return NULL;
+			return item;
 		}
-		Py_INCREF(item);
-		Py_DECREF(seq);
-		return item;
 	}
 
-	/* There are at least two things to join.  Do a pre-pass to figure out
-	 * the total amount of space we'll need (sz), see whether any argument
-	 * is absurd, and defer to the Unicode join if appropriate.
+	/* There are at least two things to join, or else we have a subclass
+	 * of the builtin types in the sequence.  
+	 * Do a pre-pass to figure out the total amount of space we'll
+	 * need (sz), see whether any argument is absurd, and defer to
+	 * the Unicode join if appropriate.
 	 */
 	for (i = 0; i < seqlen; i++) {
 		const size_t old_sz = sz;