mirror of https://github.com/python/cpython
M.-A. Lemburg <mal@lemburg.com>:
Fixed problem with Unicode string concatenation: u = (u"abc" u"abc") previously dumped core.
This commit is contained in:
parent
afe73a4687
commit
4e998bc658
|
@ -984,11 +984,32 @@ parsestrplus(n)
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue