Mercurial > cpython-lru_cache-weakref
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
