@@ -619,10 +619,7 @@ def parse(self, fp):
619619 offset_table_offset
620620 ) = struct .unpack ('>6xBBQQQ' , trailer )
621621 self ._fp .seek (offset_table_offset )
622- offset_format = '>' + _BINARY_FORMAT [offset_size ] * num_objects
623- self ._ref_format = _BINARY_FORMAT [self ._ref_size ]
624- self ._object_offsets = struct .unpack (
625- offset_format , self ._fp .read (offset_size * num_objects ))
622+ self ._object_offsets = self ._read_ints (num_objects , offset_size )
626623 return self ._read_object (self ._object_offsets [top_object ])
627624
628625 except (OSError , IndexError , struct .error ):
@@ -638,9 +635,16 @@ def _get_size(self, tokenL):
638635
639636 return tokenL
640637
638+ def _read_ints (self , n , size ):
639+ data = self ._fp .read (size * n )
640+ if size in _BINARY_FORMAT :
641+ return struct .unpack ('>' + _BINARY_FORMAT [size ] * n , data )
642+ else :
643+ return tuple (int .from_bytes (data [i : i + size ], 'big' )
644+ for i in range (0 , size * n , size ))
645+
641646 def _read_refs (self , n ):
642- return struct .unpack (
643- '>' + self ._ref_format * n , self ._fp .read (n * self ._ref_size ))
647+ return self ._read_ints (n , self ._ref_size )
644648
645649 def _read_object (self , offset ):
646650 """
0 commit comments