8000 BUG: Make dtype.descr error for out-of-order fields. (#10562) · numpy/numpy@e651b50 · GitHub
Skip to content

Commit e651b50

Browse files
authored
BUG: Make dtype.descr error for out-of-order fields. (#10562)
* BUG: Instead of returning garbage, make dtype.descr error for out-of-order fields * MAINT: Fixup test for descr failure for out-of-order field * typo
1 parent 55cc8fd commit e651b50

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

numpy/core/_internal.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ def _array_descr(descriptor):
110110
num = field[1] - offset
111111
result.append(('', '|V%d' % num))
112112
offset += num
113+
elif field[1] < offset:
114+
raise ValueError(
115+
"dtype.descr is not defined for types with overlapping or "
116+
"out-of-order fields")
113117
if len(field) > 3:
114118
name = (field[2], field[3])
115119
else:

numpy/core/tests/test_records.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,13 @@ def test_nonwriteable_setfield(self):
355355
with assert_raises(ValueError):
356356
r.setfield([2,3], *r.dtype.fields['f'])
357357

358+
def test_out_of_order_fields(self):
359+
dt = np.dtype({'names': ['a', 'b'],
360+
'formats': ['i4', 'i4'],
361+
'offsets': [4, 0]})
362+
y = np.rec.fromrecords([(1, 2), (4, 5)], dtype=dt)
363+
assert_raises(ValueError, lambda: y.dtype.descr)
364+
358365
def test_pickle_1(self):
359366
# Issue #1529
360367
a = np.array([(1, [])], dtype=[('a', np.int32), ('b', np.int32, 0)])

0 commit comments

Comments
 (0)
0