diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2018-07-08 13:57:19 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-08 13:57:19 -0600 |
commit | a56c4e6251d6e607759788727ede2fe2f10a417b (patch) | |
tree | f307c809be6356b54c8c72aea16798fc9885a54d /numpy | |
parent | 17b332819e28a52aa0d6a4bd9060747cf9997193 (diff) | |
parent | 5d6d44887850cf690879056ef6316ecaf4b7271b (diff) | |
download | numpy-a56c4e6251d6e607759788727ede2fe2f10a417b.tar.gz |
Merge pull request #11515 from mattip/field-title-refcnt-fix
BUG: decref of field title caused segfault
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/multiarray/mapping.c | 2 | ||||
-rw-r--r-- | numpy/core/tests/test_regression.py | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/numpy/core/src/multiarray/mapping.c b/numpy/core/src/multiarray/mapping.c index cdca1d606..f338226c2 100644 --- a/numpy/core/src/multiarray/mapping.c +++ b/numpy/core/src/multiarray/mapping.c @@ -1540,13 +1540,11 @@ _get_field_view(PyArrayObject *arr, PyObject *ind, PyArrayObject **view, "cannot use field titles in multi-field index"); } if (titlecmp != 0 || PyDict_SetItem(fields, title, tup) < 0) { - Py_DECREF(title); Py_DECREF(name); Py_DECREF(fields); Py_DECREF(names); return 0; } - Py_DECREF(title); } /* disallow duplicate field indices */ if (PyDict_Contains(fields, name)) { diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py index ba4413138..62f592524 100644 --- a/numpy/core/tests/test_regression.py +++ b/numpy/core/tests/test_regression.py @@ -2391,3 +2391,15 @@ class TestRegression(object): squeezed = scvalue.squeeze(axis=axis) assert_equal(squeezed, scvalue) assert_equal(type(squeezed), type(scvalue)) + + def test_field_access_by_title(self): + # gh-11507 + s = 'Some long field name' + if HAS_REFCOUNT: + base = sys.getrefcount(s) + t = np.dtype([((s, 'f1'), np.float64)]) + data = np.zeros(10, t) + for i in range(10): + v = str(data[['f1']]) + if HAS_REFCOUNT: + assert_(base <= sys.getrefcount(s)) |