Hi, On Sun, Mar 13, 2011 at 12:07 PM, Matthew Brett <matthew.br...@gmail.com> wrote: > Hi, > > On Sun, Mar 13, 2011 at 11:51 AM, Christoph Gohlke <cgoh...@uci.edu> wrote: >> >> >> On 3/13/2011 11:29 AM, Matthew Brett wrote: >>> >>> Hi >>> >>> On Sun, Mar 13, 2011 at 9:54 AM, Christoph Gohlke<cgoh...@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? >> >> Please open a ticket at <http://projects.scipy.org/numpy> and refer to this >> discussion and proposed fix. >> >> diff --git a/numpy/core/src/multiarray/mapping.c >> b/numpy/core/src/multiarray/mapping.c >> index 8db85bf..3a72811 100644 >> --- a/numpy/core/src/multiarray/mapping.c >> +++ b/numpy/core/src/multiarray/mapping.c >> @@ -812,10 +812,16 @@ array_ass_sub(PyArrayObject *self, PyObject *index, >> PyObject *op) >> } >> } >> } >> - >> +#if defined(NPY_PY3K) >> + PyErr_Format(PyExc_ValueError, >> + "field named %S not found.", >> + index); >> +#else >> PyErr_Format(PyExc_ValueError, >> "field named %s not found.", >> PyString_AsString(index)); >> +#endif >> + >> return -1; >> } > > http://projects.scipy.org/numpy/ticket/1770
Sorry to ask, and I ask partly because I'm in the middle of a py3k port, but is this the right fix to this problem? I was confused by the presence of the old PyString_AsString function. Best, Matthew _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion