aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormd52011-05-13 00:15:41 +0300
committermd52011-05-13 16:33:01 +0300
commitd352c5969a2cb51fb9c786a5570727b2f6764d6b (patch)
treecccafb3135ac3bdaa69b897098f370c8895f2a9a
parentbe5d448dde04a04e8f2b3c199388394f8be7f08b (diff)
downloadscummvm-rg350-d352c5969a2cb51fb9c786a5570727b2f6764d6b.tar.gz
scummvm-rg350-d352c5969a2cb51fb9c786a5570727b2f6764d6b.tar.bz2
scummvm-rg350-d352c5969a2cb51fb9c786a5570727b2f6764d6b.zip
SCI: Marked the sanity check inside processWorkList() as a workaround
The sanity check added in rev #35086fe17c fixes the crashes with that code when an invalid reference is about to be processed, but these references shouldn't be in the stack at all in the first place, so the root cause seems to be somewhere else.
-rw-r--r--engines/sci/engine/gc.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/engines/sci/engine/gc.cpp b/engines/sci/engine/gc.cpp
index 68b8054479..b1d461c561 100644
--- a/engines/sci/engine/gc.cpp
+++ b/engines/sci/engine/gc.cpp
@@ -90,7 +90,13 @@ static void processWorkList(SegManager *segMan, WorklistManager &wm, const Commo
wm._worklist.pop_back();
if (reg.segment != stackSegment) { // No need to repeat this one
debugC(kDebugLevelGC, "[GC] Checking %04x:%04x", PRINT_REG(reg));
- // We only check for valid offsets here. Fixes bugs #3299458 and #3295849.
+ // WORKAROUND: We only check for valid offsets here. Fixes bugs
+ // #3299458 and #3295849.
+ // FIXME: Where are these invalid offsets coming from? The check
+ // below avoids a crash when examining invalid references, but the
+ // root of the problem lies elsewhere. These shouldn't be in the
+ // stack at all (unless these really are script bugs, in which case
+ // we should just keep the sanity check).
if (reg.segment < heap.size() && heap[reg.segment] && heap[reg.segment]->isValidOffset(reg.offset)) {
// Valid heap object? Find its outgoing references!
wm.pushArray(heap[reg.segment]->listAllOutgoingReferences(reg));