Commit 0b142e28 authored by Victor Stinner's avatar Victor Stinner

Issue #18408: Fix array_index(), handle getarrayitem() failure

parent 08a80b11
...@@ -968,8 +968,13 @@ array_count(arrayobject *self, PyObject *v) ...@@ -968,8 +968,13 @@ array_count(arrayobject *self, PyObject *v)
Py_ssize_t i; Py_ssize_t i;
for (i = 0; i < Py_SIZE(self); i++) { for (i = 0; i < Py_SIZE(self); i++) {
PyObject *selfi = getarrayitem((PyObject *)self, i); PyObject *selfi;
int cmp = PyObject_RichCompareBool(selfi, v, Py_EQ); int cmp;
selfi = getarrayitem((PyObject *)self, i);
if (selfi == NULL)
return NULL;
cmp = PyObject_RichCompareBool(selfi, v, Py_EQ);
Py_DECREF(selfi); Py_DECREF(selfi);
if (cmp > 0) if (cmp > 0)
count++; count++;
...@@ -990,8 +995,13 @@ array_index(arrayobject *self, PyObject *v) ...@@ -990,8 +995,13 @@ array_index(arrayobject *self, PyObject *v)
Py_ssize_t i; Py_ssize_t i;
for (i = 0; i < Py_SIZE(self); i++) { for (i = 0; i < Py_SIZE(self); i++) {
PyObject *selfi = getarrayitem((PyObject *)self, i); PyObject *selfi;
int cmp = PyObject_RichCompareBool(selfi, v, Py_EQ); int cmp;
selfi = getarrayitem((PyObject *)self, i);
if (selfi == NULL)
return NULL;
cmp = PyObject_RichCompareBool(selfi, v, Py_EQ);
Py_DECREF(selfi); Py_DECREF(selfi);
if (cmp > 0) { if (cmp > 0) {
return PyLong_FromLong((long)i); return PyLong_FromLong((long)i);
...@@ -1016,6 +1026,8 @@ array_contains(arrayobject *self, PyObject *v) ...@@ -1016,6 +1026,8 @@ array_contains(arrayobject *self, PyObject *v)
for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(self); i++) { for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(self); i++) {
PyObject *selfi = getarrayitem((PyObject *)self, i); PyObject *selfi = getarrayitem((PyObject *)self, i);
if (selfi == NULL)
return NULL;
cmp = PyObject_RichCompareBool(selfi, v, Py_EQ); cmp = PyObject_RichCompareBool(selfi, v, Py_EQ);
Py_DECREF(selfi); Py_DECREF(selfi);
} }
...@@ -1028,8 +1040,13 @@ array_remove(arrayobject *self, PyObject *v) ...@@ -1028,8 +1040,13 @@ array_remove(arrayobject *self, PyObject *v)
int i; int i;
for (i = 0; i < Py_SIZE(self); i++) { for (i = 0; i < Py_SIZE(self); i++) {
PyObject *selfi = getarrayitem((PyObject *)self,i); PyObject *selfi;
int cmp = PyObject_RichCompareBool(selfi, v, Py_EQ); int cmp;
selfi = getarrayitem((PyObject *)self,i);
if (selfi == NULL)
return NULL;
cmp = PyObject_RichCompareBool(selfi, v, Py_EQ);
Py_DECREF(selfi); Py_DECREF(selfi);
if (cmp > 0) { if (cmp > 0) {
if (array_ass_slice(self, i, i+1, if (array_ass_slice(self, i, i+1,
...@@ -1068,7 +1085,9 @@ array_pop(arrayobject *self, PyObject *args) ...@@ -1068,7 +1085,9 @@ array_pop(arrayobject *self, PyObject *args)
PyErr_SetString(PyExc_IndexError, "pop index out of range"); PyErr_SetString(PyExc_IndexError, "pop index out of range");
return NULL; return NULL;
} }
v = getarrayitem((PyObject *)self,i); v = getarrayitem((PyObject *)self, i);
if (v == NULL)
return NULL;
if (array_ass_slice(self, i, i+1, (PyObject *)NULL) != 0) { if (array_ass_slice(self, i, i+1, (PyObject *)NULL) != 0) {
Py_DECREF(v); Py_DECREF(v);
return NULL; return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment