On Sun, Dec 4, 2011 at 10:02 AM, Charles R Harris
<charlesr.har...@gmail.com> wrote:
>
>
> On Sat, Dec 3, 2011 at 5:28 PM, Geoffrey Irving <irv...@naml.us> wrote:
>>
>> When attempting to cast to a user defined type, PyArray_GetCast looks
>> up the cast function in the dictionary but doesn't check if the entry
>> exists.  This causes segfaults.  Here's a patch.
>>
>> Geoffrey
>>
>> diff --git a/numpy/core/src/multiarray/convert_datatype.c
>> b/numpy/core/src/multiarray/convert_datatype.c
>> index 818d558..4b8f38b 100644
>> --- a/numpy/core/src/multiarray/convert_datatype.c
>> +++ b/numpy/core/src/multiarray/convert_datatype.c
>> @@ -81,7 +81,7 @@ PyArray_GetCastFunc(PyArray_Descr *descr, int type_num)
>>             key = PyInt_FromLong(type_num);
>>             cobj = PyDict_GetItem(obj, key);
>>             Py_DECREF(key);
>> -            if (NpyCapsule_Check(cobj)) {
>> +            if (cobj && NpyCapsule_Check(cobj)) {
>>                 castfunc = NpyCapsule_AsVoidPtr(cobj);
>>             }
>>         }
>> __
>
>
> I'm thinking NpyCapsule_Check should catch this. From the documentation it
> probably should:
>
> int PyCObject_Check(PyObject *p)
> Return true if its argument is a PyCObject
>
> I don't think NULL is a valid PyCObject ;) However, it should be easy to add
> the NULL check to the numpy version of the function. I'll do that.

That would work, but I think would match the rest of the Python API
better if NpyCapsule_Check required a nonnull argument.
PyCapsule_Check and essentially every other Python API function have
documented undefined behavior if you pass in null, so it might be
surprising one numpy macro violates this.  Incidentally, every other
use of NpyCapsule_Check correctly tests for null.

Geoffrey
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to