Fix two zmachine bugs found during code audit
quetzal.py: typo in _parse_umem() — cmem.dynamic_start should be cmem._dynamic_start. Would crash on uncompressed memory restore. zcpu.py: op_erase_window had if/if/else instead of if/elif/else. When window_number was -1, the second if fell through to else, calling erase_window(-1) after the correct reset path.
This commit is contained in:
parent
f4b7d0548b
commit
e0573f4229
2 changed files with 2 additions and 2 deletions
|
|
@ -172,7 +172,7 @@ class QuetzalParser:
|
||||||
self._seen_mem_or_stks = True
|
self._seen_mem_or_stks = True
|
||||||
|
|
||||||
cmem = self._zmachine._mem
|
cmem = self._zmachine._mem
|
||||||
dynamic_len = (cmem._dynamic_end - cmem.dynamic_start) + 1
|
dynamic_len = (cmem._dynamic_end - cmem._dynamic_start) + 1
|
||||||
log(f" Dynamic memory length is {dynamic_len}")
|
log(f" Dynamic memory length is {dynamic_len}")
|
||||||
self._last_loaded_metadata["dynamic memory length"] = dynamic_len
|
self._last_loaded_metadata["dynamic memory length"] = dynamic_len
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -804,7 +804,7 @@ class ZCpu:
|
||||||
if window_number == -1:
|
if window_number == -1:
|
||||||
self.op_split_window(0)
|
self.op_split_window(0)
|
||||||
self._ui.screen.erase_window(zscreen.WINDOW_LOWER)
|
self._ui.screen.erase_window(zscreen.WINDOW_LOWER)
|
||||||
if window_number == -2:
|
elif window_number == -2:
|
||||||
self._ui.screen.erase_window(zscreen.WINDOW_LOWER)
|
self._ui.screen.erase_window(zscreen.WINDOW_LOWER)
|
||||||
self._ui.screen.erase_window(zscreen.WINDOW_UPPER)
|
self._ui.screen.erase_window(zscreen.WINDOW_UPPER)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue