Skip to content

Commit c0158ed

Browse files
committed
Fix empty MemCStruct size
1 parent 6bc8a33 commit c0158ed

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

cstruct/mem_cstruct.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ def unpack_from(self, buffer: Optional[bytes], offset: int = 0) -> bool:
7272
"""
7373
self.__base__ = offset # Base offset
7474
if buffer is None:
75-
self.__mem__ = ctypes.create_string_buffer(self.__size__)
75+
# the buffer is one item larger than its size and the last element is NUL
76+
self.__mem__ = ctypes.create_string_buffer(self.__size__ + 1)
7677
elif isinstance(buffer, ctypes.Array):
7778
self.__mem__ = buffer
7879
else:

tests/test_cstruct.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,20 @@ def test_len():
650650
assert mbr.size == 512
651651

652652

653+
def test_pack_len():
654+
buffer = b'\x00' * 512
655+
mbr = MBR(buffer)
656+
d = mbr.pack()
657+
assert len(d) == 512
658+
mbr = MBR()
659+
mbr.unpack(MBR_DATA)
660+
d = mbr.pack()
661+
assert len(d) == 512
662+
mbr = MBR()
663+
d = mbr.pack()
664+
assert len(d) == 512
665+
666+
653667
def test_sizeof():
654668
assert sizeof("struct Partition") == sizeof("struct PartitionFlat")
655669
assert sizeof("struct Partition") == sizeof("struct PartitionNested")

tests/test_memcstruct.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,20 @@ def test_len():
649649
assert mbr.size == 512
650650

651651

652+
def test_pack_len():
653+
buffer = b'\x00' * 512
654+
mbr = MBR(buffer)
655+
d = mbr.pack()
656+
assert len(d) == 512
657+
mbr = MBR()
658+
mbr.unpack(MBR_DATA)
659+
d = mbr.pack()
660+
assert len(d) == 512
661+
mbr = MBR()
662+
d = mbr.pack()
663+
assert len(d) == 512
664+
665+
652666
def test_sizeof():
653667
assert sizeof("struct Partition") == sizeof("struct PartitionFlat")
654668
assert sizeof("struct Partition") == sizeof("struct PartitionNested")

0 commit comments

Comments
 (0)