From 9a0d851b576b2be592f36676f7659fceeadbe5ce Mon Sep 17 00:00:00 2001 From: Jay Bourque Date: Wed, 21 Jan 2015 13:08:50 -0600 Subject: [PATCH] BUG: Fix #3926: pickling empty string fails --- numpy/core/src/multiarray/multiarraymodule.c | 8 +++----- numpy/core/tests/test_regression.py | 7 +++++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c index 844daa82df2e..b694b150b7a1 100644 --- a/numpy/core/src/multiarray/multiarraymodule.c +++ b/numpy/core/src/multiarray/multiarraymodule.c @@ -1843,11 +1843,6 @@ array_scalar(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *kwds) &PyArrayDescr_Type, &typecode, &obj)) { return NULL; } - if (typecode->elsize == 0) { - PyErr_SetString(PyExc_ValueError, - "itemsize cannot be zero"); - return NULL; - } if (PyDataType_FLAGCHK(typecode, NPY_ITEM_IS_POINTER)) { if (obj == NULL) { @@ -1857,6 +1852,9 @@ array_scalar(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *kwds) } else { if (obj == NULL) { + if (typecode->elsize == 0) { + typecode->elsize = 1; + } dptr = PyArray_malloc(typecode->elsize); if (dptr == NULL) { return PyErr_NoMemory(); diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py index c7eaad9847d6..431f80534dc1 100644 --- a/numpy/core/tests/test_regression.py +++ b/numpy/core/tests/test_regression.py @@ -2103,6 +2103,13 @@ def __eq__(self, other): assert_equal(np.int32(10) == x, "OK") assert_equal(np.array([10]) == x, "OK") + def test_pickle_empty_string(self): + # gh-3926 + + import pickle + test_string = np.string_('') + assert_equal(pickle.loads(pickle.dumps(test_string)), test_string) + if __name__ == "__main__": run_module_suite()