[Scummvm-tracker] [ScummVM :: Bugs] #12776: SCUMM: Use after free error in DOTT intro
ScummVM :: Bugs
trac at scummvm.org
Sun Aug 1 21:00:35 UTC 2021
#12776: SCUMM: Use after free error in DOTT intro
--------------------------------+---------------------------
Reporter: criezy | Owner: (none)
Type: defect | Status: new
Priority: normal | Component: Engine: SCUMM
Version: | Keywords:
Game: Day of the Tentacle |
--------------------------------+---------------------------
With latest master code (b43d66b7f2) I am getting a crash during the Day
of the Tentacle intro on macOS when enabling address sanitiser.
The error is:
{{{
==80587==ERROR: AddressSanitizer: heap-use-after-free on address
0x00010b0a04a8 at pc 0x000103d7a900 bp 0x00016d3937c0 sp 0x00016d3937b8
WRITE of size 4 at 0x00010b0a04a8 thread T8
#0 0x103d7a8fc in MidiParser::processEvent(EventInfo const&, bool)
midiparser.cpp:286
#1 0x103d79c7c in MidiParser::onTimer() midiparser.cpp:240
#2 0x1031b4a60 in Scumm::Player::onTimer() imuse_player.cpp:863
#3 0x103197c7c in Scumm::IMuseInternal::sequencer_timers(MidiDriver*)
imuse.cpp:1021
#4 0x1031976ec in Scumm::IMuseInternal::on_timer(MidiDriver*)
imuse.cpp:353
#5 0x1031a6c68 in Scumm::IMuseInternal::midiTimerCallback(void*)
imuse.cpp:1701
#6 0x103e5890c in MidiDriver_Emulated::readBuffer(short*, int)
emumidi.h:106
#7 0x103d8d338 in Audio::CopyRateConverter<true,
false>::flow(Audio::AudioStream&, short*, unsigned int, unsigned short,
unsigned short) rate.cpp:315
#8 0x103d80270 in Audio::Channel::mix(short*, unsigned int)
mixer.cpp:618
#9 0x103d7fbe8 in Audio::MixerImpl::mixCallback(unsigned char*,
unsigned int) mixer.cpp:293
#10 0x10386a440 in SdlMixerManager::callbackHandler(unsigned char*,
int) sdl-mixer.cpp:189
#11 0x10386a348 in SdlMixerManager::sdlCallback(void*, unsigned char*,
int) sdl-mixer.cpp:196
0x00010b0a04a8 is located 552 bytes inside of 1632-byte region
[0x00010b0a0280,0x00010b0a08e0)
freed by thread T8 here:
#0 0x1064bcf14 in wrap__ZdlPv+0x74
(libclang_rt.asan_osx_dynamic.dylib:arm64e+0x4cf14)
#1 0x103d6e1f0 in MidiParser_SMF::~MidiParser_SMF()
midiparser_smf.cpp:63
#2 0x1031af6c4 in Scumm::Player::clear() imuse_player.cpp:154
#3 0x1031a14f8 in Scumm::IMuseInternal::stopSound_internal(int)
imuse.cpp:722
#4 0x10319a7b0 in Scumm::IMuseInternal::doCommand_internal(int, int*)
imuse.cpp:799
#5 0x1031a267c in Scumm::IMuseInternal::doCommand_internal(int, int,
int, int, int, int, int, int) imuse.cpp:761
#6 0x1031a5318 in Scumm::IMuseInternal::handle_marker(unsigned int,
unsigned char) imuse.cpp:1040
#7 0x1031bb450 in Scumm::sysexHandler_Scumm(Scumm::Player*, unsigned
char const*, unsigned short) sysex_scumm.cpp:185
#8 0x1031b1580 in Scumm::Player::sysEx(unsigned char const*, unsigned
short) imuse_player.cpp:422
#9 0x103d6c424 in MidiDriver_BASE::sysExNoDelay(unsigned char const*,
unsigned short) mididrv.h:213
#10 0x103d7a774 in MidiParser::processEvent(EventInfo const&, bool)
midiparser.cpp:280
#11 0x103d79c7c in MidiParser::onTimer() midiparser.cpp:240
#12 0x1031b4a60 in Scumm::Player::onTimer() imuse_player.cpp:863
#13 0x103197c7c in Scumm::IMuseInternal::sequencer_timers(MidiDriver*)
imuse.cpp:1021
previously allocated by thread T0 here:
#0 0x1064bcafc in wrap__Znwm+0x74
(libclang_rt.asan_osx_dynamic.dylib:arm64e+0x4cafc)
#1 0x103d72160 in MidiParser::createParser_SMF(signed char)
midiparser_smf.cpp:416
#2 0x1031aed3c in Scumm::Player::start_seq_sound(int, bool)
imuse_player.cpp:194
#3 0x1031ae048 in Scumm::Player::startSound(int, MidiDriver*)
imuse_player.cpp:122
#4 0x1031a0c48 in Scumm::IMuseInternal::startSound_internal(int, int)
imuse.cpp:715
#5 0x1031a1250 in Scumm::IMuseInternal::startSound(int) imuse.cpp:557
#6 0x1033d2100 in Scumm::Sound::playSound(int) sound.cpp:422
#7 0x1033cf4fc in Scumm::Sound::processSoundQueues() sound.cpp:157
#8 0x1033cdee8 in Scumm::Sound::processSound() sound.cpp:144
#9 0x1033d7174 in Scumm::Sound::soundKludge(int*, int) sound.cpp:868
#10 0x103375130 in Scumm::ScummEngine_v6::o6_soundKludge()
script_v6.cpp:2250
#11 0x103171d30 in Common::Functor0Mem<void,
Scumm::ScummEngine_v70he>::operator()() const func.h:398
#12 0x1033899e4 in Scumm::ScummEngine::executeOpcode(unsigned char)
script.cpp:493
#13 0x103389538 in Scumm::ScummEngine::executeScript() script.cpp:486
#14 0x10338f9f8 in Scumm::ScummEngine::runAllScripts() script.cpp:920
#15 0x1033c11cc in Scumm::ScummEngine::scummLoop(int) scumm.cpp:2541
#16 0x1033bf28c in Scumm::ScummEngine::go() scumm.cpp:2395
#17 0x1033c8c38 in Scumm::ScummEngine::run() scumm.h:335
}}}
This is with the original Mac CD version of DOTT.
You need to let the intro run for a while before the error occurs.
The issue has been present for at least a month (I tested f039bdb083,
which has the issue). I will try to go further back to get a better idea
when it was introduced.
--
Ticket URL: <https://bugs.scummvm.org/ticket/12776>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list