msgpack-python/test/test_seq.py

42 lines
1.2 KiB
Python
Raw Normal View History

2011-01-09 23:29:18 +09:00
#!/usr/bin/env python
# coding: utf-8
2012-06-19 14:20:56 +09:00
import io
2011-01-09 23:29:18 +09:00
import msgpack
2014-02-15 22:20:57 +09:00
binarydata = bytes(bytearray(range(256)))
2011-01-09 23:29:18 +09:00
def gen_binary_data(idx):
2014-02-15 22:20:57 +09:00
return binarydata[:idx % 300]
2011-01-09 23:29:18 +09:00
def test_exceeding_unpacker_read_size():
2012-06-19 14:20:56 +09:00
dumpf = io.BytesIO()
2011-01-09 23:29:18 +09:00
packer = msgpack.Packer()
NUMBER_OF_STRINGS = 6
read_size = 16
# 5 ok for read_size=16, while 6 glibc detected *** python: double free or corruption (fasttop):
# 20 ok for read_size=256, while 25 segfaults / glibc detected *** python: double free or corruption (!prev)
# 40 ok for read_size=1024, while 50 introduces errors
# 7000 ok for read_size=1024*1024, while 8000 leads to glibc detected *** python: double free or corruption (!prev):
2012-06-19 14:20:56 +09:00
for idx in range(NUMBER_OF_STRINGS):
2011-01-09 23:29:18 +09:00
data = gen_binary_data(idx)
dumpf.write(packer.pack(data))
2012-06-19 14:20:56 +09:00
f = io.BytesIO(dumpf.getvalue())
2011-01-09 23:29:18 +09:00
dumpf.close()
2012-09-24 02:12:55 +09:00
unpacker = msgpack.Unpacker(f, read_size=read_size, use_list=1)
2011-01-09 23:29:18 +09:00
read_count = 0
for idx, o in enumerate(unpacker):
2012-12-29 11:24:25 +09:00
assert type(o) == bytes
assert o == gen_binary_data(idx)
2011-01-09 23:29:18 +09:00
read_count += 1
2012-12-29 11:24:25 +09:00
assert read_count == NUMBER_OF_STRINGS