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:
Jared Miller 2026-02-10 13:30:44 -05:00
parent f4b7d0548b
commit e0573f4229
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C
2 changed files with 2 additions and 2 deletions

View file

@ -172,7 +172,7 @@ class QuetzalParser:
self._seen_mem_or_stks = True
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}")
self._last_loaded_metadata["dynamic memory length"] = dynamic_len

View file

@ -804,7 +804,7 @@ class ZCpu:
if window_number == -1:
self.op_split_window(0)
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_UPPER)
else: