Browse Source
bpo-44707: Fix an undefined behavior of the null pointer arithmetic (GH-27292)
pull/27449/head
Serhiy Storchaka
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
9 additions and
2 deletions
-
Objects/listobject.c
|
|
|
@ -180,9 +180,10 @@ PyList_New(Py_ssize_t size) |
|
|
|
static PyObject * |
|
|
|
list_new_prealloc(Py_ssize_t size) |
|
|
|
{ |
|
|
|
assert(size > 0); |
|
|
|
PyListObject *op = (PyListObject *) PyList_New(0); |
|
|
|
if (size == 0 || op == NULL) { |
|
|
|
return (PyObject *) op; |
|
|
|
if (op == NULL) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
assert(op->ob_item == NULL); |
|
|
|
op->ob_item = PyMem_New(PyObject *, size); |
|
|
|
@ -459,6 +460,9 @@ list_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh) |
|
|
|
PyObject **src, **dest; |
|
|
|
Py_ssize_t i, len; |
|
|
|
len = ihigh - ilow; |
|
|
|
if (len <= 0) { |
|
|
|
return PyList_New(0); |
|
|
|
} |
|
|
|
np = (PyListObject *) list_new_prealloc(len); |
|
|
|
if (np == NULL) |
|
|
|
return NULL; |
|
|
|
@ -512,6 +516,9 @@ list_concat(PyListObject *a, PyObject *bb) |
|
|
|
#define b ((PyListObject *)bb) |
|
|
|
assert((size_t)Py_SIZE(a) + (size_t)Py_SIZE(b) < PY_SSIZE_T_MAX); |
|
|
|
size = Py_SIZE(a) + Py_SIZE(b); |
|
|
|
if (size == 0) { |
|
|
|
return PyList_New(0); |
|
|
|
} |
|
|
|
np = (PyListObject *) list_new_prealloc(size); |
|
|
|
if (np == NULL) { |
|
|
|
return NULL; |
|
|
|
|