[Scummvm-tracker] [ScummVM :: Bugs] #17188: The Dig (Macintosh) crashes after R2D2 scream on Lucasarts animation logo after the ending credits
ScummVM :: Bugs
trac at scummvm.org
Tue Sep 15 05:12:57 UTC 2026
#17188: The Dig (Macintosh) crashes after R2D2 scream on Lucasarts animation logo
after the ending credits
----------------------------------+----------------------------
Reporter: filipetolhuizen | Owner: (none)
Type: defect | Status: new
Priority: high | Component: Engine: SCUMM
Version: | Resolution:
Keywords: The Dig Mac Macintosh | Game: The Dig
----------------------------------+----------------------------
Comment (by eriktorbjorn):
`_imuseDigital` is available even if `ENABLE_SCUMM_7_8` isn't defined, as
far as I can see?
I've tried investigating a bit further why it crashes. It only seems to
happen if "Ask for confirmation on exit" is enabled. The SCUMM engine
would usually show a SCUMM style or Mac style dialog, but apparently it's
gotten far enough tearing down the engine that neither of these are
available. So it goes to a ScummVM style dialog instead.
Which is pretty silly. We shouldn't present a dialog where the answer
makes no difference.
And all this happens in the `Engine` destructor. Is it even safe for it to
call things in `ScummEngine` after its destructor has run? Are there any
language lawyers in the building?
Valgrind log:
{{{
==74309== Invalid read of size 1
==74309== at 0x717A286: Scumm::IMuseDigital::isEngineDisabled()
(dimuse_engine.cpp:569)
==74309== by 0x6FAD284: Scumm::ScummDebugger::onFrame()
(debugger.cpp:131)
==74309== by 0xC32D3D4: SurfaceSdlGraphicsManager::internUpdateScreen()
(surfacesdl-graphics.cpp:1214)
==74309== by 0xC32D31E: SurfaceSdlGraphicsManager::updateScreen()
(surfacesdl-graphics.cpp:1199)
==74309== by 0xC2A1A81: ModularGraphicsBackend::updateScreen()
(modular-backend.cpp:198)
==74309== by 0xC1E6E2C: GUI::GuiManager::redrawFull() (gui-
manager.cpp:371)
==74309== by 0xC1E8758: GUI::GuiManager::screenChange() (gui-
manager.cpp:905)
==74309== by 0xC1E869E: GUI::GuiManager::checkScreenChange() (gui-
manager.cpp:877)
==74309== by 0xC1D9EE0: GUI::Dialog::Dialog(int, int, int, int, bool)
(dialog.cpp:40)
==74309== by 0xC2016DA:
GUI::MessageDialog::MessageDialog(Common::U32String const&,
Common::U32String const&, Common::U32String const&, Graphics::TextAlign,
char const*, Common::U32String const&) (message.cpp:169)
==74309== by 0xC2A500B: DefaultEventManager::pollEvent(Common::Event&)
(default-events.cpp:231)
==74309== by 0xC1BC37C: Engine::~Engine() (engine.cpp:223)
==74309== Address 0x3395ceb5 is 85 bytes inside a block of size 100,680
free'd
==74309== at 0xF4415D4: operator delete(void*)
(vg_replace_malloc.c:1096)
==74309== by 0x7178D19: Scumm::IMuseDigital::~IMuseDigital()
(dimuse_engine.cpp:171)
==74309== by 0x7122C95: Scumm::ScummEngine::~ScummEngine()
(scumm.cpp:479)
==74309== by 0x7137C03: Scumm::ScummEngine_v6::~ScummEngine_v6()
(scumm_v6.h:29)
==74309== by 0x712546A: Scumm::ScummEngine_v7::~ScummEngine_v7()
(scumm.cpp:984)
==74309== by 0x7125495: Scumm::ScummEngine_v7::~ScummEngine_v7()
(scumm.cpp:984)
==74309== by 0xC1C68D1: MetaEngine::deleteInstance(Engine*,
DetectedGame const&, void const*) (metaengine.cpp:368)
==74309== by 0x6F5369C: runGame(Plugin const*, OSystem&, DetectedGame
const&, void const*) (main.cpp:341)
==74309== by 0x6F55AA7: scummvm_main (main.cpp:840)
==74309== by 0x6F5041C: main (posix-main.cpp:56)
==74309== Block was alloc'd at
==74309== at 0xF43DF53: operator new(unsigned long)
(vg_replace_malloc.c:501)
==74309== by 0x712A87E: Scumm::ScummEngine_v7::setupScumm(Common::Path
const&) (scumm.cpp:1943)
==74309== by 0x71280AE: Scumm::ScummEngine::init() (scumm.cpp:1534)
==74309== by 0x6F8987F: Scumm::ScummEngine::run() (scumm.h:590)
==74309== by 0x6F535A4: runGame(Plugin const*, OSystem&, DetectedGame
const&, void const*) (main.cpp:328)
==74309== by 0x6F55AA7: scummvm_main (main.cpp:840)
==74309== by 0x6F5041C: main (posix-main.cpp:56)
==74309==
==74309== Invalid read of size 8
==74309== at 0xC1C6A08: MetaEngine::listSaves(char const*) const
(metaengine.cpp:386)
==74309== by 0x6FAD2B3: Scumm::ScummDebugger::onFrame()
(debugger.cpp:131)
==74309== by 0xC32D3D4: SurfaceSdlGraphicsManager::internUpdateScreen()
(surfacesdl-graphics.cpp:1214)
==74309== by 0xC32D31E: SurfaceSdlGraphicsManager::updateScreen()
(surfacesdl-graphics.cpp:1199)
==74309== by 0xC2A1A81: ModularGraphicsBackend::updateScreen()
(modular-backend.cpp:198)
==74309== by 0xC1E6E2C: GUI::GuiManager::redrawFull() (gui-
manager.cpp:371)
==74309== by 0xC1E8758: GUI::GuiManager::screenChange() (gui-
manager.cpp:905)
==74309== by 0xC1E869E: GUI::GuiManager::checkScreenChange() (gui-
manager.cpp:877)
==74309== by 0xC1D9EE0: GUI::Dialog::Dialog(int, int, int, int, bool)
(dialog.cpp:40)
==74309== by 0xC2016DA:
GUI::MessageDialog::MessageDialog(Common::U32String const&,
Common::U32String const&, Common::U32String const&, Graphics::TextAlign,
char const*, Common::U32String const&) (message.cpp:169)
==74309== by 0xC2A500B: DefaultEventManager::pollEvent(Common::Event&)
(default-events.cpp:231)
==74309== by 0xC1BC37C: Engine::~Engine() (engine.cpp:223)
==74309== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==74309==
==74309==
==74309== Process terminating with default action of signal 11 (SIGSEGV):
dumping core
==74309== Access not within mapped region at address 0x0
==74309== at 0xC1C6A08: MetaEngine::listSaves(char const*) const
(metaengine.cpp:386)
==74309== by 0x6FAD2B3: Scumm::ScummDebugger::onFrame()
(debugger.cpp:131)
==74309== by 0xC32D3D4: SurfaceSdlGraphicsManager::internUpdateScreen()
(surfacesdl-graphics.cpp:1214)
==74309== by 0xC32D31E: SurfaceSdlGraphicsManager::updateScreen()
(surfacesdl-graphics.cpp:1199)
==74309== by 0xC2A1A81: ModularGraphicsBackend::updateScreen()
(modular-backend.cpp:198)
==74309== by 0xC1E6E2C: GUI::GuiManager::redrawFull() (gui-
manager.cpp:371)
==74309== by 0xC1E8758: GUI::GuiManager::screenChange() (gui-
manager.cpp:905)
==74309== by 0xC1E869E: GUI::GuiManager::checkScreenChange() (gui-
manager.cpp:877)
==74309== by 0xC1D9EE0: GUI::Dialog::Dialog(int, int, int, int, bool)
(dialog.cpp:40)
==74309== by 0xC2016DA:
GUI::MessageDialog::MessageDialog(Common::U32String const&,
Common::U32String const&, Common::U32String const&, Graphics::TextAlign,
char const*, Common::U32String const&) (message.cpp:169)
==74309== by 0xC2A500B: DefaultEventManager::pollEvent(Common::Event&)
(default-events.cpp:231)
==74309== by 0xC1BC37C: Engine::~Engine() (engine.cpp:223)
}}}
--
Ticket URL: <https://bugs.scummvm.org/ticket/17188#comment:3>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list