PyObject_Compare can raise an exception now.
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 16d63b8..588053c 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -580,8 +580,12 @@
PyObject *args, *res;
int i;
- if (compare == NULL)
- return PyObject_Compare(x, y);
+ if (compare == NULL) {
+ i = PyObject_Compare(x, y);
+ if (i && PyErr_Occurred())
+ i = CMPERROR;
+ return i;
+ }
args = Py_BuildValue("(OO)", x, y);
if (args == NULL)
@@ -955,6 +959,8 @@
for (i = 0; i < self->ob_size; i++) {
if (PyObject_Compare(self->ob_item[i], args) == 0)
return PyInt_FromLong((long)i);
+ if (PyErr_Occurred())
+ return NULL;
}
PyErr_SetString(PyExc_ValueError, "list.index(x): x not in list");
return NULL;
@@ -975,6 +981,8 @@
for (i = 0; i < self->ob_size; i++) {
if (PyObject_Compare(self->ob_item[i], args) == 0)
count++;
+ if (PyErr_Occurred())
+ return NULL;
}
return PyInt_FromLong((long)count);
}
@@ -998,7 +1006,8 @@
Py_INCREF(Py_None);
return Py_None;
}
-
+ if (PyErr_Occurred())
+ return NULL;
}
PyErr_SetString(PyExc_ValueError, "list.remove(x): x not in list");
return NULL;