From 19d4f63af4d4b379937762324267eeb33338a708 Mon Sep 17 00:00:00 2001 From: sluicebox <22204938+sluicebox@users.noreply.github.com> Date: Mon, 20 Mar 2023 10:53:56 -0700 Subject: [PATCH] SCI: Fix crash in script debugger Stepping through an instruction that accesses an invalid property caused an error. This code is only used by the disassembler when debugging, and the disassembler already displays when a property is invalid. --- engines/sci/engine/object.cpp | 3 +-- engines/sci/engine/scriptdebug.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/engines/sci/engine/object.cpp b/engines/sci/engine/object.cpp index 2fdbb9118f0..9dac479ba95 100644 --- a/engines/sci/engine/object.cpp +++ b/engines/sci/engine/object.cpp @@ -222,8 +222,7 @@ int Object::propertyOffsetToId(SegManager *segMan, int propertyOffset) const { int selectors = getVarCount(); if (propertyOffset < 0 || (propertyOffset >> 1) >= selectors) { - error("Applied propertyOffsetToId to invalid property offset %x (property #%d not in [0..%d])", - propertyOffset, propertyOffset >> 1, selectors - 1); + // Scripts contain instructions with invalid properties return -1; } diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 16d1edb7cc7..e4ec0a88c23 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -316,8 +316,12 @@ reg_t disassemble(EngineState *s, reg_t pos, const Object *obj, bool printBWTag, } else { if (getSciVersion() == SCI_VERSION_3) debugN("\t(%s)", g_sci->getKernel()->getSelectorName(param_value).c_str()); - else - debugN("\t(%s)", g_sci->getKernel()->getSelectorName(obj->propertyOffsetToId(s->_segMan, param_value)).c_str()); + else { + int propertySelector = obj->propertyOffsetToId(s->_segMan, param_value); + if (propertySelector != -1) { + debugN("\t(%s)", g_sci->getKernel()->getSelectorName(propertySelector).c_str()); + } + } } } }