SCI: Avoid crashing when disassembling a call with a bad object

lookupSelector will raise an error if the passed object ID is
invalid.
This commit is contained in:
Colin Snover
2017-04-22 19:38:13 -05:00
parent 78fd8d39c5
commit 9e7c75cc79
+16 -12
View File
@@ -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("](");