Commit 1be1a79f authored by Raymond Hettinger's avatar Raymond Hettinger

SF bug #1030557: PyMapping_Check crashes when argument is NULL

Make PySequence_Check() and PyMapping_Check() handle NULL inputs.  This
goes beyond what most of the other checks do, but it is nice defensive
programming and solves the OP's problem.
parent 8b4e886e
...@@ -1085,7 +1085,7 @@ PyNumber_Float(PyObject *o) ...@@ -1085,7 +1085,7 @@ PyNumber_Float(PyObject *o)
int int
PySequence_Check(PyObject *s) PySequence_Check(PyObject *s)
{ {
if (PyInstance_Check(s)) if (s && PyInstance_Check(s))
return PyObject_HasAttrString(s, "__getitem__"); return PyObject_HasAttrString(s, "__getitem__");
return s != NULL && s->ob_type->tp_as_sequence && return s != NULL && s->ob_type->tp_as_sequence &&
s->ob_type->tp_as_sequence->sq_item != NULL; s->ob_type->tp_as_sequence->sq_item != NULL;
...@@ -1629,7 +1629,7 @@ PySequence_Index(PyObject *s, PyObject *o) ...@@ -1629,7 +1629,7 @@ PySequence_Index(PyObject *s, PyObject *o)
int int
PyMapping_Check(PyObject *o) PyMapping_Check(PyObject *o)
{ {
if (PyInstance_Check(o)) if (o && PyInstance_Check(o))
return PyObject_HasAttrString(o, "__getitem__"); return PyObject_HasAttrString(o, "__getitem__");
return o && o->ob_type->tp_as_mapping && return o && o->ob_type->tp_as_mapping &&
......
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