[Numpy-discussion] Segfault with python 3.2 structured array non-existent field

Matthew Brett matthew.brett@gmail....
Sun Mar 13 13:29:29 CDT 2011


Hi

On Sun, Mar 13, 2011 at 9:54 AM, Christoph Gohlke <cgohlke@uci.edu> wrote:
> On 3/13/2011 1:57 AM, Matthew Brett wrote:
>> Hi,
>> I have this on my OSX 10.6 system and numpy 1.5.1 and current numpy
>> head (30ee1d352):
>>
>> $ python3.2
>> Python 3.2 (r32:88452, Feb 20 2011, 11:12:31)
>> [GCC 4.2.1 (Apple Inc. build 5664)] on darwin
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> import numpy as np
>>>>> a = np.zeros((1,), dtype=[('f1', 'f')])
>>>>> a['f1'] = 1
>>>>> a['f2'] = 1
>> Segmentation fault
>>
>> All tests pass with np.test()
>>
>> Expected behavior with same code on python2.6:
>>
>>>>> a['f2'] = 1
>> Traceback (most recent call last):
>>    File "<stdin>", line 1, in<module>
>> ValueError: field named f2 not found.
>>
>> Cheers,
>>
>> Matthew
>
> Confirmed on Windows. The crash is in line 816 of mapping.c:
>
>         PyErr_Format(PyExc_ValueError,
>                      "field named %s not found.",
>                      PyString_AsString(index));
>
> This works with Python 3.x:
>
>         PyErr_Format(PyExc_ValueError,
>                      "field named %S not found.",
>                      index);

Sure enough, in python3.2:

>>> a[b'f2'] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: field named f2 not found.

That is - it is specifically passing a python 3 string that causes the
segmentation fault.

Is this a release blocker?  I'm afraid I don't know the code well
enough to be confident of the right fix.  Is there something I can do
to help?

Cheers,

Matthew


More information about the NumPy-Discussion mailing list