[Python-checkins] bpo-44707: Fix an undefined behavior of the null pointer arithmetic (GH-27292) (GH-27443)
ambv
webhook-mailer at python.org
Thu Jul 29 08:06:09 EDT 2021
https://github.com/python/cpython/commit/12fc0d28fcdeca32314d0755d3b30c7d96907440
commit: 12fc0d28fcdeca32314d0755d3b30c7d96907440
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: ambv <lukasz at langa.pl>
date: 2021-07-29T14:05:43+02:00
summary:
bpo-44707: Fix an undefined behavior of the null pointer arithmetic (GH-27292) (GH-27443)
(cherry picked from commit e5c8ddb1714fb51ab1defa24352c98e0f01205dc)
Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>
files:
M Objects/listobject.c
diff --git a/Objects/listobject.c b/Objects/listobject.c
index f9eb37064a9c9..6c94ba57cfe8e 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -165,9 +165,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);
@@ -446,6 +447,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;
@@ -500,6 +504,9 @@ list_concat(PyListObject *a, PyObject *bb)
if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b))
return PyErr_NoMemory();
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;
More information about the Python-checkins
mailing list