mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-18 07:39:08 +00:00
SCI: fix null pointer access in logKernelCall
method was/is used for debugging only CID 1003612
This commit is contained in:
parent
e59c652b4b
commit
07568931ce
@ -737,37 +737,39 @@ void logKernelCall(const KernelFunction *kernelCall, const KernelSubFunction *ke
|
||||
case SIG_TYPE_REFERENCE:
|
||||
{
|
||||
SegmentObj *mobj = s->_segMan->getSegmentObj(argv[parmNr].getSegment());
|
||||
switch (mobj->getType()) {
|
||||
case SEG_TYPE_HUNK:
|
||||
{
|
||||
HunkTable *ht = (HunkTable *)mobj;
|
||||
int index = argv[parmNr].getOffset();
|
||||
if (ht->isValidEntry(index)) {
|
||||
// NOTE: This ", deleted" isn't as useful as it could
|
||||
// be because it prints the status _after_ the kernel
|
||||
// call.
|
||||
debugN(" ('%s' hunk%s)", ht->_table[index].type, ht->_table[index].mem ? "" : ", deleted");
|
||||
} else
|
||||
debugN(" (INVALID hunk ref)");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// TODO: Any other segment types which could
|
||||
// use special handling?
|
||||
|
||||
if (kernelCall->function == kSaid) {
|
||||
SegmentRef saidSpec = s->_segMan->dereference(argv[parmNr]);
|
||||
if (saidSpec.isRaw) {
|
||||
debugN(" ('");
|
||||
g_sci->getVocabulary()->debugDecipherSaidBlock(saidSpec.raw);
|
||||
debugN("')");
|
||||
} else {
|
||||
debugN(" (non-raw said-spec)");
|
||||
}
|
||||
} else {
|
||||
debugN(" ('%s')", s->_segMan->getString(argv[parmNr]).c_str());
|
||||
if (mobj) {
|
||||
switch (mobj->getType()) {
|
||||
case SEG_TYPE_HUNK:
|
||||
{
|
||||
HunkTable *ht = (HunkTable *)mobj;
|
||||
int index = argv[parmNr].getOffset();
|
||||
if (ht->isValidEntry(index)) {
|
||||
// NOTE: This ", deleted" isn't as useful as it could
|
||||
// be because it prints the status _after_ the kernel
|
||||
// call.
|
||||
debugN(" ('%s' hunk%s)", ht->_table[index].type, ht->_table[index].mem ? "" : ", deleted");
|
||||
} else
|
||||
debugN(" (INVALID hunk ref)");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// TODO: Any other segment types which could
|
||||
// use special handling?
|
||||
|
||||
if (kernelCall->function == kSaid) {
|
||||
SegmentRef saidSpec = s->_segMan->dereference(argv[parmNr]);
|
||||
if (saidSpec.isRaw) {
|
||||
debugN(" ('");
|
||||
g_sci->getVocabulary()->debugDecipherSaidBlock(saidSpec.raw);
|
||||
debugN("')");
|
||||
} else {
|
||||
debugN(" (non-raw said-spec)");
|
||||
}
|
||||
} else {
|
||||
debugN(" ('%s')", s->_segMan->getString(argv[parmNr]).c_str());
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user