Commit 598710c7 authored by Andrew Dalke's avatar Andrew Dalke

Added overflow test for adding two (very) large strings where the

new string is over max Py_ssize_t.  I have no way to test it on my
box or any box I have access to.  At least it doesn't break anything.
parent f344c94c
...@@ -1023,7 +1023,7 @@ string_length(PyStringObject *a) ...@@ -1023,7 +1023,7 @@ string_length(PyStringObject *a)
static PyObject * static PyObject *
string_concat(register PyStringObject *a, register PyObject *bb) string_concat(register PyStringObject *a, register PyObject *bb)
{ {
register size_t size; register Py_ssize_t size;
register PyStringObject *op; register PyStringObject *op;
if (!PyString_Check(bb)) { if (!PyString_Check(bb)) {
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
...@@ -1047,7 +1047,12 @@ string_concat(register PyStringObject *a, register PyObject *bb) ...@@ -1047,7 +1047,12 @@ string_concat(register PyStringObject *a, register PyObject *bb)
return (PyObject *)a; return (PyObject *)a;
} }
size = a->ob_size + b->ob_size; 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 */ /* Inline PyObject_NewVar */
op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size); op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
if (op == NULL) if (op == NULL)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment