Skip to content

Commit 35009d2

Browse files
author
rocky
committed
More robust for Graal
1 parent 52b0f1f commit 35009d2

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

xdis/bytecode_graal.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,11 @@ def get_instructions_bytes_graal(
117117
if arg >= len(cells):
118118
argrepr = freevars[arg - len(cells)]
119119
else:
120-
argrepr = cells[arg]
120+
if 0 < arg < len(cells[arg]):
121+
argrepr = cells[arg]
122+
else:
123+
argrepr = "???"
124+
121125
break
122126
elif opcode in (
123127
opc.opmap["LOAD_FAST"],
@@ -129,7 +133,10 @@ def get_instructions_bytes_graal(
129133

130134
elif optype == "name":
131135
argval = arg
132-
argrepr = names[arg]
136+
if 0 <= arg < len(names):
137+
argrepr = names[arg]
138+
else:
139+
argrepr = "??"
133140
break
134141
elif opcode == opc.opmap["FORMAT_VALUE"]:
135142
argval = arg

xdis/marsh.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,7 @@ def load(self):
650650
try:
651651
return self.dispatch[c](self)
652652
except KeyError:
653-
raise ValueError("bad marshal code: %c (%d)" % (c, c))
653+
raise ValueError("bad marshal code: %s (%s)" % (hex(c), hex(c)))
654654

655655
def r_byte(self):
656656
return self._read(1)

xdis/unmarshal.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,8 @@ def t_code_old(self, _, bytes_for_s: bool = False):
794794
# Since Python 3.4
795795
def t_object_reference(self, save_ref=None, bytes_for_s: bool = False):
796796
refnum = self.read_uint32()
797+
if not (0 < refnum < len(self.intern_objects)):
798+
return self.intern_objects[-1]
797799
return self.intern_objects[refnum]
798800

799801
def t_unknown(self, save_ref=None, bytes_for_s: bool = False):

0 commit comments

Comments
 (0)