summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorJohn Stechschulte <john.l.stechschulte@gmail.com>2013-10-19 10:51:55 -0700
committerJohn Stechschulte <john.l.stechschulte@gmail.com>2013-10-20 08:56:16 -0700
commitc71f36658459e87cc3c938308b62ce0e0b34a6f8 (patch)
tree13c819127b5c2cee262783c8afc12ab5ff0bf6b3 /numpy
parent18acfa462a63bcdaf86360f0c94bc9347ecafad5 (diff)
downloadnumpy-c71f36658459e87cc3c938308b62ce0e0b34a6f8.tar.gz
BUG: #2052 del scalar subscript causes segfault
Fixes issue #2052, where attempting to delete a scalar field causes a segfault. Returns ValueError instead, like when attempting to delete an array element. Also added a test for this bug.
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/scalartypes.c.src6
-rw-r--r--numpy/core/tests/test_multiarray.py4
2 files changed, 10 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/scalartypes.c.src b/numpy/core/src/multiarray/scalartypes.c.src
index 6f3637cc1..0bd367567 100644
--- a/numpy/core/src/multiarray/scalartypes.c.src
+++ b/numpy/core/src/multiarray/scalartypes.c.src
@@ -2185,6 +2185,12 @@ voidtype_ass_subscript(PyVoidScalarObject *self, PyObject *ind, PyObject *val)
return -1;
}
+ if (!val) {
+ PyErr_SetString(PyExc_ValueError,
+ "cannot delete scalar field");
+ return -1;
+ }
+
#if defined(NPY_PY3K)
if (PyUString_Check(ind)) {
#else
diff --git a/numpy/core/tests/test_multiarray.py b/numpy/core/tests/test_multiarray.py
index c41c56b9c..01bff8f69 100644
--- a/numpy/core/tests/test_multiarray.py
+++ b/numpy/core/tests/test_multiarray.py
@@ -3553,6 +3553,10 @@ def test_flat_element_deletion():
except:
raise AssertionError
+def test_scalar_element_deletion():
+ a = np.zeros(2, dtype=[('x', 'int'), ('y', 'int')])
+ assert_raises(ValueError, a[0].__delitem__, 'x')
+
class TestMemEventHook(TestCase):
def test_mem_seteventhook(self):
# The actual tests are within the C code in