On Sun, Dec 4, 2011 at 10:02 AM, Charles R Harris
<
charlesr.harris@gmail.com> wrote:
>
>
> On Sat, Dec 3, 2011 at 5:28 PM, Geoffrey Irving <
irving@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.