Skip to content

Commit e5c8ddb

Browse files
bpo-44707: Fix an undefined behavior of the null pointer arithmetic (GH-27292)
1 parent ce5e1a6 commit e5c8ddb

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

Objects/listobject.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,10 @@ PyList_New(Py_ssize_t size)
180180
static PyObject *
181181
list_new_prealloc(Py_ssize_t size)
182182
{
183+
assert(size > 0);
183184
PyListObject *op = (PyListObject *) PyList_New(0);
184-
if (size == 0 || op == NULL) {
185-
return (PyObject *) op;
185+
if (op == NULL) {
186+
return NULL;
186187
}
187188
assert(op->ob_item == NULL);
188189
op->ob_item = PyMem_New(PyObject *, size);
@@ -459,6 +460,9 @@ list_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
459460
PyObject **src, **dest;
460461
Py_ssize_t i, len;
461462
len = ihigh - ilow;
463+
if (len <= 0) {
464+
return PyList_New(0);
465+
}
462466
np = (PyListObject *) list_new_prealloc(len);
463467
if (np == NULL)
464468
return NULL;
@@ -512,6 +516,9 @@ list_concat(PyListObject *a, PyObject *bb)
512516
#define b ((PyListObject *)bb)
513517
assert((size_t)Py_SIZE(a) + (size_t)Py_SIZE(b) < PY_SSIZE_T_MAX);
514518
size = Py_SIZE(a) + Py_SIZE(b);
519+
if (size == 0) {
520+
return PyList_New(0);
521+
}
515522
np = (PyListObject *) list_new_prealloc(size);
516523
if (np == NULL) {
517524
return NULL;

0 commit comments

Comments
 (0)