mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-16 06:56:39 +02:00
python: Add test for issue29.
This commit is contained in:
parent
5a12ab98c4
commit
23333c98d7
49
python/test/test_seq.py
Normal file
49
python/test/test_seq.py
Normal file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python
|
||||
# coding: utf-8
|
||||
|
||||
from nose import main
|
||||
from nose.tools import *
|
||||
|
||||
import StringIO
|
||||
import msgpack
|
||||
|
||||
binarydata = [chr(i) for i in xrange(256)]
|
||||
binarydata = "".join(binarydata)
|
||||
|
||||
def gen_binary_data(idx):
|
||||
data = binarydata[:idx % 300]
|
||||
return data
|
||||
|
||||
def test_exceeding_unpacker_read_size():
|
||||
dumpf = StringIO.StringIO()
|
||||
|
||||
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):
|
||||
|
||||
for idx in xrange(NUMBER_OF_STRINGS):
|
||||
data = gen_binary_data(idx)
|
||||
dumpf.write(packer.pack(data))
|
||||
|
||||
f = StringIO.StringIO(dumpf.getvalue())
|
||||
dumpf.close()
|
||||
|
||||
unpacker = msgpack.Unpacker(f, read_size=read_size)
|
||||
|
||||
read_count = 0
|
||||
for idx, o in enumerate(unpacker):
|
||||
assert_equal(type(o), str)
|
||||
assert_equal(o, gen_binary_data(idx))
|
||||
read_count += 1
|
||||
|
||||
assert_equal(read_count, NUMBER_OF_STRINGS)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# main()
|
||||
test_exceeding_unpacker_read_size()
|
Loading…
x
Reference in New Issue
Block a user