diff options
-rw-r--r-- | Objects/stringobject.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 277d4b3287..e74744d369 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -1023,7 +1023,7 @@ string_length(PyStringObject *a) static PyObject * string_concat(register PyStringObject *a, register PyObject *bb) { - register size_t size; + register Py_ssize_t size; register PyStringObject *op; if (!PyString_Check(bb)) { #ifdef Py_USING_UNICODE @@ -1047,7 +1047,12 @@ string_concat(register PyStringObject *a, register PyObject *bb) return (PyObject *)a; } size = a->ob_size + b->ob_size; - /* XXX check overflow */ + if (size < 0) { + PyErr_SetString(PyExc_OverflowError, + "strings are too large to concat"); + return NULL; + } + /* Inline PyObject_NewVar */ op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size); if (op == NULL) |