mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	(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.
This commit is contained in:
		
							parent
							
								
									dd50cb748a
								
							
						
					
					
						commit
						674f241e9c
					
				
					 2 changed files with 31 additions and 12 deletions
				
			
		|  | @ -1618,22 +1618,18 @@ string_join(PyStringObject *self, PyObject *orig) | |||
| 	} | ||||
| 	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; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Raymond Hettinger
						Raymond Hettinger