@@ -71,7 +71,8 @@ def unpack(stream, object_hook=None, list_hook=None, use_list=True,
7171 use_list = use_list , encoding = encoding , unicode_errors = unicode_errors ,
7272 object_pairs_hook = object_pairs_hook )
7373 ret = unpacker ._fb_unpack ()
74- unpacker ._fb_check_for_extradata ()
74+ if unpacker ._fb_got_extradata ():
75+ raise ExtraData (ret , unpacker ._fb_get_extradata ())
7576 return ret
7677
7778def unpackb (packed , object_hook = None , list_hook = None , use_list = True ,
@@ -85,7 +86,8 @@ def unpackb(packed, object_hook=None, list_hook=None, use_list=True,
8586 object_pairs_hook = object_pairs_hook )
8687 unpacker .feed (packed )
8788 ret = unpacker ._fb_unpack ()
88- unpacker ._fb_check_for_extradata ()
89+ if unpacker ._fb_got_extradata ():
90+ raise ExtraData (ret , unpacker ._fb_get_extradata ())
8991 return ret
9092
9193class Unpacker (object ):
@@ -192,15 +194,16 @@ def _fb_consume(self):
192194 self ._fb_buf_i = 0
193195 self ._fb_buf_n = sum (map (len , self ._fb_buffers ))
194196
195- def _fb_check_for_extradata (self ):
197+ def _fb_got_extradata (self ):
196198 if self ._fb_buf_i != len (self ._fb_buffers ):
197- raise ExtraData
199+ return True
198200 if self ._fb_feeding :
199- return
201+ return False
200202 if not self .file_like :
201- return
202- if not self .file_like .read (1 ):
203- raise ExtraData
203+ return False
204+ if self .file_like .read (1 ):
205+ return True
206+ return False
204207
205208 def __iter__ (self ):
206209 return self
@@ -216,6 +219,12 @@ def next(self):
216219 def read_bytes (self , n ):
217220 return self ._fb_read (n )
218221
222+ def _fb_get_extradata (self ):
223+ bufs = self ._fb_buffers [self ._fb_buf_i :]
224+ if bufs :
225+ bufs [0 ] = bufs [0 ][self ._fb_buf_o :]
226+ return '' .join (bufs )
227+
219228 def _fb_read (self , n , write_bytes = None ):
220229 ret = ''
221230 while len (ret ) != n :
0 commit comments