Make sure that no use of a function pointer gotten from a

tp_as_sequence or tp_as_mapping structure is made without checking it
for NULL first.
This commit is contained in:
Guido van Rossum 1998-05-22 00:53:47 +00:00
parent 1c4f458099
commit 7df115de65
1 changed files with 5 additions and 3 deletions

View File

@ -274,13 +274,15 @@ strop_joinfields(self, args)
}
return res;
}
else if (!PySequence_Check(seq)) {
if (seq->ob_type->tp_as_sequence == NULL ||
(getitemfunc = seq->ob_type->tp_as_sequence->sq_item) == NULL)
{
PyErr_SetString(PyExc_TypeError,
"first argument must be a sequence");
return NULL;
}
/* type safe */
getitemfunc = seq->ob_type->tp_as_sequence->sq_item;
/* This is now type safe */
for (i = 0; i < seqlen; i++) {
PyObject *item = getitemfunc(seq, i);
if (!item || !PyString_Check(item)) {