diff Python/compile.c @ 12388:c48172af13dc legacy-trunk

M.-A. Lemburg <mal@lemburg.com>: Fixed problem with Unicode string concatenation: u = (u"abc" u"abc") previously dumped core.
author Fred Drake <fdrake@acm.org>
date Thu, 13 Apr 2000 14:10:44 +0000
parents 525b2358721e
children 0c28c9cabbda
line wrap: on
line diff
--- a/Python/compile.c	Thu Apr 13 14:10:04 2000 +0000
+++ b/Python/compile.c	Thu Apr 13 14:10:44 2000 +0000
@@ -984,11 +984,32 @@
 	REQ(CHILD(n, 0), STRING);
 	if ((v = parsestr(STR(CHILD(n, 0)))) != NULL) {
 		/* String literal concatenation */
-		for (i = 1; i < NCH(n) && v != NULL; i++) {
-			PyString_ConcatAndDel(&v, parsestr(STR(CHILD(n, i))));
+		for (i = 1; i < NCH(n); i++) {
+		    PyObject *s;
+		    s = parsestr(STR(CHILD(n, i)));
+		    if (s == NULL)
+			goto onError;
+		    if (PyString_Check(v) && PyString_Check(s)) {
+			PyString_ConcatAndDel(&v, s);
+			if (v == NULL)
+			    goto onError;
+		    }
+		    else {
+			PyObject *temp;
+			temp = PyUnicode_Concat(v, s);
+			Py_DECREF(s);
+			if (temp == NULL)
+			    goto onError;
+			Py_DECREF(v);
+			v = temp;
+		    }
 		}
 	}
 	return v;
+
+ onError:
+	Py_XDECREF(v);
+	return NULL;
 }
 
 static void