@@ -38,8 +38,13 @@ cdef extern from "pack.h":
3838cdef int DEFAULT_RECURSE_LIMIT= 511
3939
4040
41- class BufferFull (Exception ):
42- pass
41+ from msgpack.exceptions import (
42+ UnpackException,
43+ BufferFull,
44+ OutOfData,
45+ UnpackValueError,
46+ ExtraData,
47+ )
4348
4449
4550cdef class Packer(object ):
@@ -102,7 +107,7 @@ cdef class Packer(object):
102107 cdef dict d
103108
104109 if nest_limit < 0 :
105- raise ValueError ( " Too deep ." )
110+ raise UnpackValueError( " recursion limit exceeded ." )
106111
107112 if o is None :
108113 ret = msgpack_pack_nil(& self .pk)
@@ -296,7 +301,7 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
296301 if ret == 1 :
297302 obj = template_data(& ctx)
298303 if off < buf_len:
299- raise ValueError ( " Extra data. " )
304+ raise ExtraData(obj, PyBytes_FromStringAndSize(buf + off, buf_len - off) )
300305 return obj
301306 else :
302307 return None
@@ -425,7 +430,7 @@ cdef class Unpacker(object):
425430 cdef Py_ssize_t buf_len
426431 if self .file_like is not None :
427432 raise AssertionError (
428- " unpacker.feed() is not be able to use with`file_like`." )
433+ " unpacker.feed() is not be able to use with `file_like`." )
429434 PyObject_AsReadBuffer(next_bytes, < const_void_ptr* > & buf, & buf_len)
430435 self .append_buffer(buf, buf_len)
431436
@@ -479,7 +484,7 @@ cdef class Unpacker(object):
479484 else :
480485 self .file_like = None
481486
482- cdef object _unpack(self , execute_fn execute, object write_bytes):
487+ cdef object _unpack(self , execute_fn execute, object write_bytes, bint iter = 0 ):
483488 cdef int ret
484489 cdef object obj
485490 cdef size_t prev_head
@@ -497,7 +502,10 @@ cdef class Unpacker(object):
497502 if self .file_like is not None :
498503 self .read_from_file()
499504 continue
500- raise StopIteration (" No more data to unpack." )
505+ if iter :
506+ raise StopIteration (" No more data to unpack." )
507+ else :
508+ raise OutOfData(" No more data to unpack." )
501509 else :
502510 raise ValueError (" Unpack failed: error = %d " % (ret,))
503511
@@ -539,7 +547,7 @@ cdef class Unpacker(object):
539547 return self
540548
541549 def __next__ (self ):
542- return self ._unpack(template_construct, None )
550+ return self ._unpack(template_construct, None , 1 )
543551
544552 # for debug.
545553 # def _buf(self):
0 commit comments