summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2011-03-15 11:10:24 -0600
committerCharles Harris <charlesr.harris@gmail.com>2011-03-15 11:15:58 -0600
commitc1bec1ddc38648b415df4387e4172e32c29a1d94 (patch)
tree1b181c11506b181290a477f07e20d5b98aa6152c
parentc010f2ff9b520d1fdd7a97b14757e2e3f314cee0 (diff)
downloadnumpy-c1bec1ddc38648b415df4387e4172e32c29a1d94.tar.gz
BUG: Fix ticket #1770, segfault with python 3.2 structured array
non-existent field.
-rw-r--r--numpy/core/src/multiarray/mapping.c6
-rw-r--r--numpy/core/tests/test_regression.py12
2 files changed, 18 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/mapping.c b/numpy/core/src/multiarray/mapping.c
index 8db85bf8f..31472333d 100644
--- a/numpy/core/src/multiarray/mapping.c
+++ b/numpy/core/src/multiarray/mapping.c
@@ -813,9 +813,15 @@ 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;
}
diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py
index 5458fac33..4c02ee60f 100644
--- a/numpy/core/tests/test_regression.py
+++ b/numpy/core/tests/test_regression.py
@@ -1562,5 +1562,17 @@ class TestRegression(TestCase):
assert_equal(r[0:3:2]['f1'][0][()], r[0:3:2][0]['f1'][()])
assert_equal(r[0:3:2]['f1'][0].strides, r[0:3:2][0]['f1'].strides)
+ def test_ticket_1770(self):
+ "Should not segfault on python 3k"
+ import numpy as np
+ try:
+ a = np.zeros((1,), dtype=[('f1', 'f')])
+ a['f1'] = 1
+ a['f2'] = 1
+ except ValueError:
+ pass
+ except:
+ raise AssertionError
+
if __name__ == "__main__":
run_module_suite()