mirror of
https://github.com/python/cpython.git
synced 2025-10-03 13:45:29 +00:00
bpo-44707: Fix an undefined behavior of the null pointer arithmetic (GH-27292) (GH-27443)
(cherry picked from commit e5c8ddb171
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
7922546859
commit
12fc0d28fc
1 changed files with 9 additions and 2 deletions
|
@ -165,9 +165,10 @@ PyList_New(Py_ssize_t size)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_new_prealloc(Py_ssize_t size)
|
list_new_prealloc(Py_ssize_t size)
|
||||||
{
|
{
|
||||||
|
assert(size > 0);
|
||||||
PyListObject *op = (PyListObject *) PyList_New(0);
|
PyListObject *op = (PyListObject *) PyList_New(0);
|
||||||
if (size == 0 || op == NULL) {
|
if (op == NULL) {
|
||||||
return (PyObject *) op;
|
return NULL;
|
||||||
}
|
}
|
||||||
assert(op->ob_item == NULL);
|
assert(op->ob_item == NULL);
|
||||||
op->ob_item = PyMem_New(PyObject *, size);
|
op->ob_item = PyMem_New(PyObject *, size);
|
||||||
|
@ -446,6 +447,9 @@ list_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
Py_ssize_t i, len;
|
Py_ssize_t i, len;
|
||||||
len = ihigh - ilow;
|
len = ihigh - ilow;
|
||||||
|
if (len <= 0) {
|
||||||
|
return PyList_New(0);
|
||||||
|
}
|
||||||
np = (PyListObject *) list_new_prealloc(len);
|
np = (PyListObject *) list_new_prealloc(len);
|
||||||
if (np == NULL)
|
if (np == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -500,6 +504,9 @@ list_concat(PyListObject *a, PyObject *bb)
|
||||||
if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b))
|
if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b))
|
||||||
return PyErr_NoMemory();
|
return PyErr_NoMemory();
|
||||||
size = Py_SIZE(a) + Py_SIZE(b);
|
size = Py_SIZE(a) + Py_SIZE(b);
|
||||||
|
if (size == 0) {
|
||||||
|
return PyList_New(0);
|
||||||
|
}
|
||||||
np = (PyListObject *) list_new_prealloc(size);
|
np = (PyListObject *) list_new_prealloc(size);
|
||||||
if (np == NULL) {
|
if (np == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue