it suffices to check for PY_SSIZE_T_MAX overflow (#22643)
This commit is contained in:
parent
c0e64f5027
commit
1e211ff10d
|
@ -9484,12 +9484,11 @@ case_operation(PyObject *self,
|
||||||
kind = PyUnicode_KIND(self);
|
kind = PyUnicode_KIND(self);
|
||||||
data = PyUnicode_DATA(self);
|
data = PyUnicode_DATA(self);
|
||||||
length = PyUnicode_GET_LENGTH(self);
|
length = PyUnicode_GET_LENGTH(self);
|
||||||
if (length > PY_SSIZE_T_MAX / 3 ||
|
if (length > PY_SSIZE_T_MAX / (3 * sizeof(Py_UCS4))) {
|
||||||
length > PY_SIZE_MAX / (3 * sizeof(Py_UCS4))) {
|
|
||||||
PyErr_SetString(PyExc_OverflowError, "string is too long");
|
PyErr_SetString(PyExc_OverflowError, "string is too long");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tmp = PyMem_MALLOC(sizeof(Py_UCS4) * 3 * (size_t)length);
|
tmp = PyMem_MALLOC(sizeof(Py_UCS4) * 3 * length);
|
||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
return PyErr_NoMemory();
|
return PyErr_NoMemory();
|
||||||
newlength = perform(kind, data, length, tmp, &maxchar);
|
newlength = perform(kind, data, length, tmp, &maxchar);
|
||||||
|
|
Loading…
Reference in New Issue