@@ -74,22 +74,25 @@ def _decode_map(self, size, offset):
7474 container [key ] = value
7575 return container , offset
7676
77- _pointer_value_offset = {
78- 1 : 0 ,
79- 2 : 2048 ,
80- 3 : 526336 ,
81- 4 : 0 ,
82- }
83-
8477 def _decode_pointer (self , size , offset ):
85- pointer_size = ((size >> 3 ) & 0x3 ) + 1
78+ pointer_size = (size >> 3 ) + 1
79+
80+ buf = self ._buffer [offset :offset + pointer_size ]
8681 new_offset = offset + pointer_size
87- pointer_bytes = self ._buffer [offset :new_offset ]
88- packed = pointer_bytes if pointer_size == 4 else struct .pack (
89- b'!c' , byte_from_int (size & 0x7 )) + pointer_bytes
90- unpacked = int_from_bytes (packed )
91- pointer = unpacked + self ._pointer_base + \
92- self ._pointer_value_offset [pointer_size ]
82+
83+ if pointer_size == 1 :
84+ buf = byte_from_int (size & 0x7 ) + buf
85+ pointer = struct .unpack (b'!H' , buf )[0 ] + self ._pointer_base
86+ elif pointer_size == 2 :
87+ buf = b'\x00 ' + byte_from_int (size & 0x7 ) + buf
88+ pointer = struct .unpack (b'!I' , buf )[0 ] + 2048 + self ._pointer_base
89+ elif pointer_size == 3 :
90+ buf = byte_from_int (size & 0x7 ) + buf
91+ pointer = struct .unpack (b'!I' ,
92+ buf )[0 ] + 526336 + self ._pointer_base
93+ else :
94+ pointer = struct .unpack (b'!I' , buf )[0 ] + self ._pointer_base
95+
9396 if self ._pointer_test :
9497 return pointer , new_offset
9598 (value , _ ) = self .decode (pointer )
0 commit comments