Opened 16 years ago

Closed 16 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
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 16 years ago.
A Screenshor of the debug console containing the errormessage
comi.s22 (220.2 KB ) - added by Kirben 16 years ago.
Save Game
comi.txt (18.7 KB ) - added by SF/khalek 16 years ago.
valgrind output

Download all attachments as: .zip

Change History (22)

by SF/moge, 16 years ago

Attachment: comi2.jpg added

A Screenshor of the debug console containing the errormessage

comment:1 by SF/moge, 16 years ago

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

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

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

comment:7 by SF/ender, 16 years ago

Marking as 0.6.0 release critical...

comment:8 by fingolfin, 16 years ago

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

by Kirben, 16 years ago

Attachment: comi.s22 added

Save Game

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

Owner: set to fingolfin

comment:11 by fingolfin, 16 years ago

Owner: changed from fingolfin to aquadran

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

How about a valgrind trace?

Two different crashes suggest either a memory corruption
issue..

by SF/khalek, 16 years ago

Attachment: comi.txt added

valgrind output

comment:16 by SF/khalek, 16 years ago

output from a valgrind run attached

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

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