diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -765,6 +765,14 @@ Py_SIZE(deque) == 0); } +static int +valid_index(Py_ssize_t i, Py_ssize_t limit) +{ + /* Cast to size_t to make a single test + * checks whether 0 <= i < limit */ + return (size_t) i < (size_t) limit; +} + static PyObject * deque_item(dequeobject *deque, Py_ssize_t i) { @@ -772,7 +780,7 @@ PyObject *item; Py_ssize_t n, index=i; - if ((size_t)i >= (size_t)Py_SIZE(deque)) { + if (!valid_index(i, Py_SIZE(deque))) { PyErr_SetString(PyExc_IndexError, "deque index out of range"); return NULL; @@ -836,7 +844,7 @@ block *b; Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i; - if ((size_t)i >= (size_t)len) { + if (!valid_index(i, len)) { PyErr_SetString(PyExc_IndexError, "deque index out of range"); return -1;