Opened 10 months ago
Closed 10 months ago
#14892 closed defect (fixed)
DOTT: Crash when trying to play MM on Ed's computer
Reported by: | alexbevi | Owned by: | lephilousophe |
---|---|---|---|
Priority: | normal | Component: | Engine: SCUMM |
Version: | Keywords: | ||
Cc: | Game: | Day of the Tentacle |
Description (last modified by )
ScummVM 2.9.0git1616-g563456df1eb (Jan 19 2024 05:37:02) Using SDL backend with SDL 2.28.5 Features compiled in: TAINTED Vorbis FLAC MP3 TiMidity RGB zLib MPEG2 FluidSynth Theora VPX AAC A/52 FreeType2 FriBiDi JPEG PNG GIF taskbar TTS cloud (servers, local) ENet SDL2 TinyGL OpenGL (with shaders) OpenGL desktop only
- Go to Ed's room
- Look at the computer
User picked target 'tentacle' (engine ID 'scumm', game ID 'tentacle')... Looking for a plugin supporting this target... SCUMM [all games] Assertion failed: (endP >= beginP), function BaseString, file str-base.cpp, line 118. [1] 25247 abort scummvm
Attachments (1)
Change History (12)
comment:1 by , 10 months ago
Description: | modified (diff) |
---|
comment:2 by , 10 months ago
Game: | → Day of the Tentacle |
---|
comment:4 by , 10 months ago
I wasn't able to reproduce it, but I assume it happens somewhere in ScummEngine::startManiac(). It does some string manipulation to try and figure out which game to start.
comment:5 by , 10 months ago
It seems that there's some issue in how ScummVM code reacts to at least one of your folder paths. Can you try moving the whole game, including its internal MANIAC folder on a simpler and shorter path, maybe without special characters (like accented letters)?
by , 10 months ago
Attachment: | tentacle.s01 added |
---|
comment:6 by , 10 months ago
I removed the game from scummvm, updated the path to /Users/alex/Downloads/dott
and readded it. Loaded a save state and tried again and it still crashes.
Attached savefile in case it helps.
comment:7 by , 10 months ago
Actually, I think the issue is I'm missing the MANIAC
folder - which would explain why this doesn't work.
Might make sense for startManiac()
to validate the presence of the folder and just throw a warning instead of crashing scummvm.
comment:8 by , 10 months ago
If it helps any this is the stack trace
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x7ff81528b1e2 __pthread_kill + 10 1 libsystem_pthread.dylib 0x7ff8152c2ee6 pthread_kill + 263 2 libsystem_c.dylib 0x7ff8151e9b45 abort + 123 3 libsystem_c.dylib 0x7ff8151e8e5e __assert_rtn + 314 4 scummvm 0x10aef4136 Common::BaseString<char>::BaseString(char const*, char const*) + 102 (str-base.cpp:118) 5 scummvm 0x1064e5bc5 Common::String::String(char const*, char const*) + 37 (str.h:78) 6 scummvm 0x1064e5985 Common::String::String(char const*, char const*) + 37 (str.h:78) 7 scummvm 0x10aee7551 Common::Path::extract(char const*, char const*) const + 289 (path.cpp:261) 8 scummvm 0x10aee8c9c Common::Path::relativeTo(Common::Path const&) const + 140 (path.cpp:680) 9 scummvm 0x10642cacc Scumm::ScummEngine::startManiac() + 460 (scumm.cpp:3770) 10 scummvm 0x106411791 Scumm::ScummEngine_v6::o6_kernelSetFunctions() + 273 (script_v6.cpp:3000) 11 scummvm 0x106412503 Common::Functor0Mem<void, Scumm::ScummEngine_v6>::operator()() const + 99 (func.h:397) 12 scummvm 0x106413eee Scumm::ScummEngine::executeOpcode(unsigned char) + 126 (script.cpp:492) 13 scummvm 0x106413d78 Scumm::ScummEngine::executeScript() + 472 (script.cpp:485) 14 scummvm 0x106412bfd Scumm::ScummEngine::runScriptNested(int) + 269 (script.cpp:337) 15 scummvm 0x106412ecc Scumm::ScummEngine::runObjectScript(int, int, bool, bool, int*, int, int) + 492 (script.cpp:136) 16 scummvm 0x10640860a Scumm::ScummEngine_v6::o6_startObject() + 186 (script_v6.cpp:1020) 17 scummvm 0x106412503 Common::Functor0Mem<void, Scumm::ScummEngine_v6>::operator()() const + 99 (func.h:397) 18 scummvm 0x106413eee Scumm::ScummEngine::executeOpcode(unsigned char) + 126 (script.cpp:492) 19 scummvm 0x106413d78 Scumm::ScummEngine::executeScript() + 472 (script.cpp:485) 20 scummvm 0x106412bfd Scumm::ScummEngine::runScriptNested(int) + 269 (script.cpp:337) 21 scummvm 0x1064127a2 Scumm::ScummEngine::runScript(int, bool, bool, int*, int) + 626 (script.cpp:89) 22 scummvm 0x1064170b9 Scumm::ScummEngine::checkAndRunSentenceScript() + 1113 (script.cpp:1175) 23 scummvm 0x106428ef8 Scumm::ScummEngine::scummLoop(int) + 1496 (scumm.cpp:2738) 24 scummvm 0x106428493 Scumm::ScummEngine::go() + 819 (scumm.cpp:2469) 25 scummvm 0x1062de0c2 Scumm::ScummEngine::run() + 178 (scumm.h:583) 26 scummvm 0x10628c791 runGame(Plugin const*, Plugin const*, OSystem&, Common::String const&) + 3793 (main.cpp:326) 27 scummvm 0x10628a259 scummvm_main + 6233 (main.cpp:806) 28 scummvm 0x106283a9a main + 202 (macosx-main.cpp:44) 29 dyld 0x7ff814f6941f start + 1903
comment:9 by , 10 months ago
I was able to reproduce it with a scummvm.ini where Day of the Tentacle was the only game I had added.
At this point, it's looping through all installed games trying to find one that's installed in a "maniac" sub-folder to the current one. One of the games it checks is Day of the Tentacle itself, i.e. it will check if a path is relative to itself.
This leads to Path::extract("", nullptr) being called, where "" is one byte after what it calculates as the string's end point. Then it tries to create a new string from that begin/end, and that's where it crashes. I think.
We could easily check that path != currentPath in the startManiac() loop, but it seems to me that path.relativeTo(currentPath) shouldn't be allowed to crash when path.isRelativeTo(currentPath) is true. Which leads to the question, should a path be considered relative to itself or not? Seems like a question for Le Philousophe.
By the way, we could probably replace the path.toString('/').matchString("*maniac*", ...) check with something simpler now, after the recent "Migrate engine to Path" changes? Perhaps check (case insensitive) what path.getLastComponent() points to? It looks like that would strip away any trailing path separators, which was the point of using matchString() to begin with.
comment:10 by , 10 months ago
Hello,
Thanks for the report.
I fixed the crash in Path class in aceaf9981617120ea9e6ba138bc521b6a2f56742.
comment:11 by , 10 months ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
So I guess it's fixed then. But if not, feel free to reopen.
Edit: Oops, that comment was meant for another bug report.