8000 Merge pull request #87 from msgpack/fix-83 · Vayu/msgpack-python@7b24d0f · GitHub
[go: up one dir, main page]

Skip to content

Commit 7b24d0f

Browse files
committed
Merge pull request msgpack#87 from msgpack/fix-83
Feed data from file before _unpack()
2 parents d2fc801 + 9d61f24 commit 7b24d0f

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

msgpack/_unpacker.pyx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,18 @@ cdef class Unpacker(object):
327327
cdef int ret
328328
cdef object obj
329329
cdef size_t prev_head
330+
331+
if self.buf_head >= self.buf_tail and self.file_like is not None:
332+
self.read_from_file()
333+
330334
while 1:
331335
prev_head = self.buf_head
336+
if prev_head >= self.buf_tail:
337+
if iter:
338+
raise StopIteration("No more data to unpack.")
339+
else:
340+
raise OutOfData("No more data to unpack.")
341+
332342
ret = execute(&self.ctx, self.buf, self.buf_tail, &self.buf_head)
333343
if write_bytes is not None:
334344
write_bytes(PyBytes_FromStringAndSize(self.buf + prev_head, self.buf_head - prev_head))

test/test_unpack_file.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from io import BytesIO
2+
from msgpack import Unpacker, packb, OutOfData
3+
from pytest import raises
4+
5+
6+
def test_unpack_array_header_from_file():
7+
f = BytesIO(packb([1,2,3,4]))
8+
unpacker = Unpacker(f)
9+
assert unpacker.read_array_header() == 4
10+
assert unpacker.unpack() == 1
11+
assert unpacker.unpack() == 2
12+
assert unpacker.unpack() == 3
13+
assert unpacker.unpack() == 4
14+
with raises(OutOfData):
15+
unpacker.unpack()
16+
17+
18+
if __name__ == '__main__':
19+
test_unpack_array_header_from_file()

0 commit comments

Comments
 (0)
0