Opened 3 weeks ago

Closed 3 weeks ago

#15450 closed defect (fixed)

DGDS: Crash with German version on Speech bubbles

Reported by: windlepoons Owned by: mduggan
Priority: high Component: Engine: DGDS
Version: Keywords:
Cc: Game: Rise of the Dragon

Description

If the image with the speech bubble appears in the intro after the scrolling text, ScummVM crashes with Segmentation fault.
The same thing happens right at the beginning of the game (without the intro).:
Left-click on the sink (water is running), then right-click and left-click again.

The German version of Rise of the Dragon is therefore currently not playable.

ScummVM 2.9.0git10406-g83dae368205 (Nov 2 2024 04:10:23)
OS:Siduction (Debian/sid)

--

I have attached a log file from the GNU debugger.
The log at the bottom would be interesting:

Thread 1 "scummvm" received signal SIGSEGV, Segmentation fault.
0x0000555556c25790 in Dgds::PFont::getCharWidth(unsigned int) const ()
    at /data/src/engines/dgds/font.cpp:169
warning: 169	/data/src/engines/dgds/font.cpp: No such file or directory

Attachments (1)

GNU-Debugger_log.txt (87.9 KB ) - added by windlepoons 3 weeks ago.

Download all attachments as: .zip

Change History (4)

by windlepoons, 3 weeks ago

Attachment: GNU-Debugger_log.txt added

comment:1 by windlepoons, 3 weeks ago

The same problems exist with the German versions of The Adventures of Willy Beamish and Heart of China.

comment:2 by mduggan, 3 weeks ago

Thanks for the report, I've just pushed a change which might fix this because it fixes a potentially invalid pointer usage in that situation:
https://github.com/scummvm/scummvm/commit/53c16214080a6bf105704431a029d7660272f1ad

I'll take another look at this to be sure though.

comment:3 by mduggan, 3 weeks ago

Owner: set to mduggan
Resolution: fixed
Status: newclosed

In cea5b29f:

DGDS: Fix crash on German dgds intro

The font functions take u32 but that was sign-extending when coming out of a
non-u32 string. This never comes up in the English version, but the German
font has codepoints over 128.

Also fixed a couple of places where it was incorrectly measuring a string
position instead of a char value.

This fixes #15450.

Note: See TracTickets for help on using tickets.