b29fae0c56
Prior to this patch mp_opcode_format would calculate the incorrect size of the MP_BC_UNWIND_JUMP opcode, missing the additional byte. But, because opcodes below 0x10 are unused and treated as bytes in the .mpy load/save and freezing code, this bug did not show any symptoms, since nested unwind jumps would rarely (if ever) reach a depth of 16 (so the extra byte of this opcode would be between 0x01 and 0x0f and be correctly loaded/saved/frozen simply as an undefined opcode). This patch fixes this bug by correctly accounting for the additional byte. .
74 lines
1.3 KiB
Python
74 lines
1.3 KiB
Python
# test deep unwind via break from nested try-except (22 of them)
|
|
while True:
|
|
print(1)
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
try:
|
|
print(2)
|
|
break
|
|
print(3)
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
except:
|
|
pass
|
|
print(4)
|