[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