Skip to content

Commit 8da7490

Browse files
authored
Merge pull request numpy#27226 from seberg/issue-27225
BUG: Fix ``PyArray_ZeroContiguousBuffer`` (resize) with struct dtypes
2 parents 3c823a7 + b3721c5 commit 8da7490

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

numpy/_core/src/multiarray/refcount.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,23 @@ PyArray_ZeroContiguousBuffer(
8383
if (get_fill_zero_loop(
8484
NULL, descr, aligned, descr->elsize, &(zero_info.func),
8585
&(zero_info.auxdata), &flags_unused) < 0) {
86-
goto fail;
86+
return -1;
8787
}
8888
}
8989
else {
90+
assert(zero_info.func == NULL);
91+
}
92+
if (zero_info.func == NULL) {
9093
/* the multiply here should never overflow, since we already
9194
checked if the new array size doesn't overflow */
9295
memset(data, 0, size*stride);
93-
NPY_traverse_info_xfree(&zero_info);
9496
return 0;
9597
}
9698

9799
int res = zero_info.func(
98100
NULL, descr, data, size, stride, zero_info.auxdata);
99101
NPY_traverse_info_xfree(&zero_info);
100102
return res;
101-
102-
fail:
103-
NPY_traverse_info_xfree(&zero_info);
104-
return -1;
105103
}
106104

107105

numpy/_core/tests/test_multiarray.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9185,6 +9185,12 @@ def test_resize(self):
91859185
d.resize(150)
91869186
assert_(old < sys.getsizeof(d))
91879187

9188+
@pytest.mark.parametrize("dtype", ["u4,f4", "u4,O"])
9189+
def test_resize_structured(self, dtype):
9190+
a = np.array([(0, 0.0) for i in range(5)], dtype=dtype)
9191+
a.resize(1000)
9192+
assert_array_equal(a, np.zeros(1000, dtype=dtype))
9193+
91889194
def test_error(self):
91899195
d = np.ones(100)
91909196
assert_raises(TypeError, d.__sizeof__, "a")

0 commit comments

Comments
 (0)