From e0573f42299390287e9e318517dfcc5f8254ce50 Mon Sep 17 00:00:00 2001 From: Jared Miller Date: Tue, 10 Feb 2026 13:30:44 -0500 Subject: [PATCH] Fix two zmachine bugs found during code audit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- src/mudlib/zmachine/quetzal.py | 2 +- src/mudlib/zmachine/zcpu.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mudlib/zmachine/quetzal.py b/src/mudlib/zmachine/quetzal.py index c5d66b2..90ecda8 100644 --- a/src/mudlib/zmachine/quetzal.py +++ b/src/mudlib/zmachine/quetzal.py @@ -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 diff --git a/src/mudlib/zmachine/zcpu.py b/src/mudlib/zmachine/zcpu.py index 4241189..21f5da7 100644 --- a/src/mudlib/zmachine/zcpu.py +++ b/src/mudlib/zmachine/zcpu.py @@ -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: