aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorColin Snover2017-02-25 19:16:26 -0600
committerColin Snover2017-04-22 19:38:13 -0500
commit9e7c75cc79c7b39b1dcdb9d48bd2ed0c33c649f0 (patch)
tree0a20fb210c79b4e38fb0d79762f202e6ef29e72f /engines
parent78fd8d39c500cb85fdf5766ce1d836816264fad6 (diff)
downloadscummvm-rg350-9e7c75cc79c7b39b1dcdb9d48bd2ed0c33c649f0.tar.gz
scummvm-rg350-9e7c75cc79c7b39b1dcdb9d48bd2ed0c33c649f0.tar.bz2
scummvm-rg350-9e7c75cc79c7b39b1dcdb9d48bd2ed0c33c649f0.zip
SCI: Avoid crashing when disassembling a call with a bad object
lookupSelector will raise an error if the passed object ID is invalid.
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/scriptdebug.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp
index 2dcf03b0d8..507fd97795 100644
--- a/engines/sci/engine/scriptdebug.cpp
+++ b/engines/sci/engine/scriptdebug.cpp
@@ -317,18 +317,22 @@ reg_t disassemble(EngineState *s, reg32_t pos, reg_t objAddr, bool printBWTag, b
debugN(" %s::%s[", name, g_sci->getKernel()->getSelectorName(selector).c_str());
- switch (lookupSelector(s->_segMan, called_obj_addr, selector, 0, &fun_ref)) {
- case kSelectorMethod:
- debugN("FUNCT");
- argc += restmod;
- restmod = 0;
- break;
- case kSelectorVariable:
- debugN("VAR");
- break;
- case kSelectorNone:
- debugN("INVALID");
- break;
+ if (!s->_segMan->getObject(called_obj_addr)) {
+ debugN("INVALID_OBJ");
+ } else {
+ switch (lookupSelector(s->_segMan, called_obj_addr, selector, 0, &fun_ref)) {
+ case kSelectorMethod:
+ debugN("FUNCT");
+ argc += restmod;
+ restmod = 0;
+ break;
+ case kSelectorVariable:
+ debugN("VAR");
+ break;
+ case kSelectorNone:
+ debugN("INVALID");
+ break;
+ }
}
debugN("](");