[Numpy-discussion] bug in PyArray_GetCastFunc

Charles R Harris charlesr.harris at gmail.com
Sun Dec 4 13:02:32 EST 2011


On Sat, Dec 3, 2011 at 5:28 PM, Geoffrey Irving <irving at 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<http://docs.python.org/release/2.7/c-api/structures.html#PyObject>
* *p*)
Return true if its argument is a
PyCObject<http://docs.python.org/release/2.7/c-api/cobject.html#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.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20111204/19b47f40/attachment.html>


More information about the NumPy-Discussion mailing list