Opened 19 years ago
Closed 19 years ago
#1482 closed defect (fixed)
RC COMI: Crash when talking to Haggis
|Reported by:||SF/moge||Owned by:||aquadran|
|Cc:||Game:||Monkey Island 3|
After reading the newest newspost, I decided to play Curse of Monkey Island once again, and I think I found a bug. It appeared (at least) since the 19. Febuary, using the daily Build for Windows (XP), and I downloaded the newest daily build and checked it again a few minutes ago (scummvm -v shows "ScummVM 0.5.7cvs (Feb 23 2004 03:36:16) Features compiled in: Vorbis MP3 zLib MPEG2"). The datafiles were copied to the harddisk. The crash appears in the german version ot Monkey Island 3, when talking to Haggis about his name ("Haggis. Das ist mal ein ungewöhnlicher name." meaning "Haggis, thats an unusual name" in english.). Then Haggis tells him that Haggis is actually only a nickname. The Sound is playing fine until it reaches the middle of the last word "Spitzname" (meaning "nickname"). At that point ScummVm opens a debug console, with an errormessage. (I'll try to include a Screenshot). The errormessage is always something like "BundleCodecs::decompressCodec() Unknown Codec 655619!", but the number at the end changes from time to time (for example 917762, 917763, 721155...). I also tried it with Linux (compiled it myself) and there it didn't show the console but simply crashed. If this part of Haggis reply is skipped over with the "." key, the game runs normaly after that, and thats the only place i have seen this. I also tried to copy the Datafiles again, and running it from CD, but the problem was still there When starting scummvm from a command prompt and typing exit into the console after the error, there are two errormessages of the same type, and the only difference is a second "!" at the end of the second one. It looks like this: BundleCodecs::decompressCodec() Unknown codec 655619! BundleCodecs::decompressCodec() Unknown codec 655619!! I also downloaded an older version (I think 0.5.1) and there the game didn't crash, but made a short noise at that point, but went on to the next Line, which was played normally. I also checked the original Interpreter from Lucasarts, and there it worked normally, so i don't think my CDs are damaged. But i could not check it with different CDs.
Ticket imported from: #902354. Ticket imported from: bugs/1482.
Change History (22)
by , 19 years ago
comment:1 by , 19 years ago
|Summary:||Crash when talking to Haggis → COMI: Crash when talking to Haggis|
comment:2 by , 19 years ago
I don't get this in the English version. Can somebody else confirm this happens in their German version?
comment:3 by , 19 years ago
Well, the problem is still there for me, I just retried it three Times (daily Build from 23. Feb and latest daily Build for Windows) and once I got a different Errormessage. This time it was this: Error (21: 28: 0x18A3) BundleCodecs::decompressCodec() Unknown codec 852227! The Other two were the same as before, again with changing numbers. But as I said before, i can not try it with a different CD. I could ask some friends to test it with my CDs, but I don't know if this would help...
comment:4 by , 19 years ago
That's why I'm waiting for somebody else to try it with a different CD :)
This sounds like either corrupt data, or corrupt memory. Trying a different CD, once somebody replies to this bug report, will allow us to narrow down the issue.
comment:5 by , 19 years ago
arrrgh! i'm a fool! I completely oversaw this bug report, sorry. bug  is a duplicate. I think the german sound may be corrupt, cause I'm getting the exact same error (CoMI,german,OSX, march 5th build).
heres my output: " scumm/imuse_digi/dimuse_bndmgr.cpp:221: failed assertion `output_size <= 0x2000' "or" BundleCodecs::decompressCodec() Unknown codec 20709378!" the other times codecs with numbers "45273248", "44059136", "40588272" and "1095454547" were mentioned.
to clarify the question is HGSO314 in language.tab
now how do I delete a bug report?
comment:6 by , 19 years ago
|Priority:||normal → blocker|
|Summary:||COMI: Crash when talking to Haggis → RC COMI: Crash when talking to Haggis|
comment:7 by , 19 years ago
Marking as 0.6.0 release critical...
comment:8 by , 19 years ago
A savegame just before the bug would be helpful...
by , 19 years ago
comment:9 by , 19 years ago
Kirben attached a save. Could you take a look at this? I want to get this damn release out *g*
comment:10 by , 19 years ago
comment:11 by , 19 years ago
comment:12 by , 19 years ago
Can reproduce the problem with the attached savegame, german COMI, HEAD CVS, SDL 1.2.7, on my OSX machine: BundleCodecs::decompressCodec() Unknown codec 16448! With the english COMI it worked just fine. Looking into it a bit now.
There are many possible causes for this, theoretically, including * a bug in the german datafiles * a bug in our InsaneDigital code * a bug in our code handing the LANGUAGE.TAB code * something else ;-)
comment:13 by , 19 years ago
Using the german LANGUAGE.TAB with the english data files works just fine. So we can exclude that possibility.
comment:14 by , 19 years ago
I inserted a printf into decompressCodec(), and got this:
... decompressCodec(codec=13, input_size=3320) decompressCodec(codec=13, input_size=3595) decompressCodec(codec=13, input_size=3573) decompressCodec(codec=0, input_size=13691) scumm/imuse_digi/dimuse_bndmgr.cpp:221: failed assertion `output_size <= 0x2000'
Another time I got this:
decompressCodec(codec=13, input_size=3320) decompressCodec(codec=13, input_size=3595) decompressCodec(codec=13, input_size=3573) decompressCodec(codec=100237312, input_size=3578408) (21:28:0x18A3): BundleCodecs::decompressCodec() Unknown codec 100237312!
So the problem is caused somewhere after decompressCodec(codec=13, input_size=3573) is called but before the next call to decompressCodec...
comment:15 by , 19 years ago
How about a valgrind trace?
Two different crashes suggest either a memory corruption issue..
by , 19 years ago
comment:16 by , 19 years ago
output from a valgrind run attached
comment:17 by , 19 years ago
Well, it looks like it's pretty obvious there is memory corruption
going on when reading the german voice files. I don't see this
with the english version.
Now, the problem is that it's up to somebody with the german gamedata to look into the cause and perhaps add in some error checking. *whistles* :)
comment:18 by , 19 years ago
The Valgrind report looks rather useless to me. Invalid writes occur in three places, all affect these two lines: ... comp_input = (byte *)malloc(_compTable[i].size + 1); comp_input[_compTable[i].size] = 0; ... So it claims that the second line (which writes into the memory allocated by the mallc in the line above) were writing 0 resp. 3 bytes after the end of malloc'ed memory block. Say what? Looking at the valgrind report, the value of _compTable[i].size is correct at that place, too. Hum.
Later entries look as if last_block might exceed or meet the total number of blocks. It might be wise to store the "num" value computed in line 182 in dimuse_bndmgr.c into a member variable (_compTableSize ?), and then add some sanity checks for last_block... I have to leave to uni now, else i'd do it myself.
comment:19 by , 19 years ago
|Status:||new → closed|
A Screenshor of the debug console containing the errormessage