Signed-off-by: Yongtao Huang <yongtaoh2022@gmail.com>
self.check_struct(S)
self.assertEqual(S.largeField.bit_size, size * 8)
+ def test_bitfield_overflow_error_message(self):
+ with self.assertRaisesRegex(
+ ValueError,
+ r"bit field 'x' overflows its type \(2 \+ 7 > 8\)",
+ ):
+ CField(
+ name="x",
+ type=c_byte,
+ byte_size=1,
+ byte_offset=0,
+ index=0,
+ _internal_use=True,
+ bit_size=7,
+ bit_offset=2,
+ )
# __set__ and __get__ should raise a TypeError in case their self
# argument is not a ctype instance.
--- /dev/null
+Fix the ctypes bitfield overflow error message to report the correct offset and size calculation.
if ((bitfield_size + bit_offset) > byte_size * 8) {
PyErr_Format(
PyExc_ValueError,
- "bit field %R overflows its type (%zd + %zd >= %zd)",
- name, bit_offset, byte_size*8);
+ "bit field %R overflows its type (%zd + %zd > %zd)",
+ name, bit_offset, bitfield_size, byte_size * 8);
goto error;
}
}