Opened 20 years ago

Closed 20 years ago

#1482 closed defect (fixed)

RC COMI: Crash when talking to Haggis

Reported by: SF/moge Owned by: aquadran
Priority: blocker Component: Engine: SCUMM
Version: Keywords:
Cc: Game: Monkey Island 3

Description

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.

Attachments (3)

comi2.jpg (54.7 KB ) - added by SF/moge 20 years ago.
A Screenshor of the debug console containing the errormessage
comi.s22 (220.2 KB ) - added by Kirben 20 years ago.
Save Game
comi.txt (18.7 KB ) - added by SF/khalek 20 years ago.
valgrind output

Download all attachments as: .zip

Change History (22)

by SF/moge, 20 years ago

Attachment: comi2.jpg added

A Screenshor of the debug console containing the errormessage

comment:1 by SF/moge, 20 years ago

Summary: Crash when talking to HaggisCOMI: Crash when talking to Haggis

comment:2 by SF/ender, 20 years ago

I don't get this in the English version. Can somebody else confirm this happens in their German version?

comment:3 by SF/moge, 20 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 SF/ender, 20 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 SF/huggedahippo, 20 years ago

arrrgh! i'm a fool! I completely oversaw this bug report, sorry. bug [911069] 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 SF/ender, 20 years ago

Priority: normalblocker
Summary: COMI: Crash when talking to HaggisRC COMI: Crash when talking to Haggis

comment:7 by SF/ender, 20 years ago

Marking as 0.6.0 release critical...

comment:8 by fingolfin, 20 years ago

A savegame just before the bug would be helpful...

by Kirben, 20 years ago

Attachment: comi.s22 added

Save Game

comment:9 by SF/ender, 20 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 SF/ender, 20 years ago

Owner: set to fingolfin

comment:11 by fingolfin, 20 years ago

Owner: changed from fingolfin to aquadran

comment:12 by fingolfin, 20 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 fingolfin, 20 years ago

Using the german LANGUAGE.TAB with the english data files works just fine. So we can exclude that possibility.

comment:14 by fingolfin, 20 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 SF/ender, 20 years ago

How about a valgrind trace?

Two different crashes suggest either a memory corruption issue..

by SF/khalek, 20 years ago

Attachment: comi.txt added

valgrind output

comment:16 by SF/khalek, 20 years ago

output from a valgrind run attached

comment:17 by SF/ender, 20 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 fingolfin, 20 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 aquadran, 20 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.