From c9cef5e9711a33c5e8a0a442b336175df5ebb3c2 Mon Sep 17 00:00:00 2001 From: md5 Date: Fri, 13 May 2011 00:15:41 +0300 Subject: 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. --- engines/sci/engine/gc.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/engines/sci/engine/gc.cpp b/engines/sci/engine/gc.cpp index 9c580dd8dc..b40677d4ed 100644 --- a/engines/sci/engine/gc.cpp +++ b/engines/sci/engine/gc.cpp @@ -87,7 +87,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)); -- cgit v1.2.3