http://bugs.winehq.org/show_bug.cgi?id=27398
Summary: Debug4x: Application locks at start Product: Wine Version: 1.3.21 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown AssignedTo: wine-bugs@winehq.org ReportedBy: stefano.priore@inwind.it
Debug4x is a free development environment for the 48/49/50 series of HP calculators.
Current available version at http://www.debug4x.com/ (v2.2 - build 159) hangs after a successful installation during first launch.
I've tried to obtain a backtrace as suggested at http://wiki.winehq.org/Backtraces?action=show&redirect=winedbg - I'll attach soon the (very short) report.
http://bugs.winehq.org/show_bug.cgi?id=27398
--- Comment #1 from Stefano Priore stefano.priore@inwind.it 2011-06-05 10:00:04 CDT --- Created an attachment (id=35036) --> (http://bugs.winehq.org/attachment.cgi?id=35036) Output of winedbg
That's all the output I've been able to extract from running winedbg. My attempts to "attach" to the pid of Debug4x to obtain a more complete backtrace failed due to the fact that "attach" is not a recognized command, despite what http://wiki.winehq.org/Backtraces?action=show&redirect=winedbg says.
http://bugs.winehq.org/show_bug.cgi?id=27398
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download Status|UNCONFIRMED |NEW URL| |http://www.debug4x.com/ CC| |focht@gmx.net Component|-unknown |gdi32 Summary|Debug4x: Application locks |Debug4x: Application |at start |locks/crashes at start due | |to bad symbol font handling | |(failed default charset/map | |selection) Ever Confirmed|0 |1
--- Comment #2 from Anastasius Focht focht@gmx.net 2011-06-05 13:15:08 CDT --- Hello,
the problem seems to be the default charset/map handling for a symbol font "HP48" the application installs and uses at runtime.
--- snip --- ... 0021:trace:font:WineEngCreateFontInstance L"HP48", h=-13, it=0, weight=400, PandF=00, charset=1 orient 0 escapement 0 0021:trace:font:WineEngCreateFontInstance DC transform 1.000000 0.000000 0.000000 1.000000 0021:trace:font:WineEngCreateFontInstance not in cache 0021:trace:font:WineEngCreateFontInstance (it=0, bd=0) is selected for (it=0, bd=0) 0021:trace:font:WineEngCreateFontInstance Chosen: L"HP48" L"Regular" (/home/focht/.wine/dosdevices/c:/windows/Fonts/HP48.TTF/(nil):0) 0021:trace:font:WineEngCreateFontInstance font scale y: 1.000000 0021:trace:font:OpenFontFace "/home/focht/.wine/dosdevices/c:/windows/Fonts/HP48.TTF"/(nil), 0, 0 x -13 0021:trace:font:WineEngGetFontData font=0x1b29b8, table=VDMX, offset=0x0, buf=0x32f1f6, cbData=0x6 0021:trace:font:WineEngGetFontData Can't find table VDMX 0021:trace:font:OpenFontFace height -13 => ppem 13 0021:trace:font:WineEngCreateFontInstance caching: gdiFont=0x1b29b8 hfont=0x4ccc 0021:trace:font:X11DRV_SelectFont hdc=0xabc, hfont=0x4ccc 0021:trace:font:X11DRV_SelectFont gdiFont = 0x1b29b8 0021:trace:font:update_font_code_page charset 0 => cp 1252 0021:Ret gdi32.SelectObject() retval=0000007c ret=004b3a9b 0021:Call gdi32.GetFontLanguageInfo(00000abc) ret=004b3aa3 0021:Ret gdi32.GetFontLanguageInfo() retval=00000000 ret=004b3aa3 0021:Call gdi32.SelectObject(00000abc,0000007c) ret=004b3ab2 ... 0021:trace:font:WineEngCreateFontInstance L"HP48", h=-13, it=0, weight=400, PandF=00, charset=1 orient 0 escapement 0 0021:trace:font:WineEngCreateFontInstance DC transform 1.000000 0.000000 0.000000 1.000000 0021:trace:font:WineEngCreateFontInstance returning cached gdiFont(0x1b29b8) for hFont 0x4cd0 0021:trace:font:X11DRV_SelectFont hdc=0xabc, hfont=0x4cd0 0021:trace:font:X11DRV_SelectFont gdiFont = 0x1b29b8 0021:trace:font:update_font_code_page charset 0 => cp 1252 0021:Ret gdi32.SelectObject() retval=0000007c ret=004b4324 0021:Call gdi32.GetTextMetricsA(00000abc,0032f658) ret=004b3e56 0021:trace:font:WineEngGetOutlineTextMetrics font=0x1b29b8 0021:trace:font:WineEngGetOutlineTextMetrics OS/2 winA = 899 winD = 196 typoA = 613 typoD = -188 typoLG = 100 FT_Face a = 899, d = -196, h = 1150: HORZ a = 899, d = -196 lg = 55 maxY = 899 minY = -196 0021:trace:font:GetTextMetricsW text metrics: Weight = 400 FirstChar = 0 AveCharWidth = 8 Italic = 0 LastChar = 61695 MaxCharWidth = 14 UnderLined = 0 DefaultChar = 31 Overhang = 0 StruckOut = 0 BreakChar = 32 CharSet = 0 PitchAndFamily = 36 -------------------- InternalLeading = 1 Ascent = 12 Descent = 3 Height = 15 0021:Ret gdi32.GetTextMetricsA() retval=00000001 ret=004b3e56 0021:Call gdi32.GetCharABCWidthsA(00000abc,0000004d,0000004d,0032f64c) ret=004b3e64 0021:trace:font:FONT_mbtowc mapped "M" -> L"M" 0021:trace:font:WineEngGetCharABCWidths 0x1b29b8, 77, 77, 0x32f64c 0021:trace:seh:raise_exception code=c0000005 flags=0 addr=0x6878c821 ip=6878c821 tid=0021 0021:trace:seh:raise_exception info[0]=00000000 0021:trace:seh:raise_exception info[1]=00000004 0021:trace:seh:raise_exception eax=00000000 ebx=687c4ff4 ecx=00000000 edx=001b29b8 esi=0032f630 edi=0032f5b0 0021:trace:seh:raise_exception ebp=0032f468 esp=0032f420 cs=0073 ds=007b es=007b fs=0033 gs=003b flags=00010202 0021:trace:seh:call_vectored_handlers calling handler at 0x68f79bdc code=c0000005 flags=0 0021:trace:seh:call_vectored_handlers handler at 0x68f79bdc returned 0 ... *boom* --- snip ---
An unhandled failure to select default charmap when the font was initialized leads to a later crash when font->ft_face->charmap is accessed.
Code: http://source.winehq.org/git/wine.git/blob/e6d6fbf6e94282f7063ab3d50bdc8b90a...
Winedbg:
--- snip --- Wine-dbg> 0x7b463818 get_glyph_index+0x12 [/opt/projects/wine/wine-git/dlls/gdi32/freetype.c:4558] in gdi32: movl 0x8(%ebp),%eax 4558 if(font->ft_face->charmap->encoding == FT_ENCODING_NONE) { Wine-dbg>bt Backtrace: =>0 0x7b463818 get_glyph_index+0x12(font=0x19f810, glyph=0x4d) [/opt/projects/wine/wine-git/dlls/gdi32/freetype.c:4558] in gdi32 (0x0033f4e8) 1 0x7b467fe1 get_glyph_index_linked+0x38(font=0x19f810, c=0x4d, linked_font=0x33f564, glyph=0x33f568) [/opt/projects/wine/wine-git/dlls/gdi32/freetype.c:5928] in gdi32 (0x0033f518) 2 0x7b4682c2 WineEngGetCharABCWidths+0xd3(font=0x19f810, firstChar=0x4d, lastChar=0x4d, buffer=0x33f64c) [/opt/projects/wine/wine-git/dlls/gdi32/freetype.c:5999] in gdi32 (0x0033f588) 3 0x7b4524ae GetCharABCWidthsW+0x84(hdc=0xabc, firstChar=0x4d, lastChar=0x4d, abc=0x33f64c) [/opt/projects/wine/wine-git/dlls/gdi32/font.c:2426] in gdi32 (0x0033f5c8) 4 0x7b4523a2 GetCharABCWidthsA+0xf0(hdc=0xabc, firstChar=0x4d, lastChar=0x4d, abc=0x33f64c) [/opt/projects/wine/wine-git/dlls/gdi32/font.c:2377] in gdi32 (0x0033f618) 5 0x004b3e64 in debug4x (+0xb3e63) (0x0033f69c) 6 0x004b435f in debug4x (+0xb435e) (0x004b3870) 7 0x004b410c in debug4x (+0xb410b) (0x004b4084) 8 0x7500087b (0x83d88b53) --- snip ---
Relevant data structures at this point:
--- snip --- Wine-dbg>p *font {entry={next=0x19e500, prev=0x7b49fd60}, gm=0x19e2f8, gmsize=0x1, hfontlist={next=0x1a0be0, prev=0x19cf30}, potm=0x1a0c28, total_kern_pairs=0xffffffff, kern_pairs=(nil), child_fonts={next=0x19f834, prev=0x19f834}, ft_face=0x7d103da8, mapping=0x1a0b20, name="HP48", charset=0, codepage=0x4e4, fake_italic=0, fake_bold=0, underline=0, strikeout=0, orientation=0, font_desc={hash=0xfe97fe1f, lf={lfHeight=0xfffffff3, lfWidth=0, lfEscapement=0, lfOrientation=0, lfWeight=0x190, lfItalic=0, lfUnderline=0, lfStrikeOut=0, lfCharSet=1, lfOutPrecision=0, lfClipPrecision=0, lfQuality=0, lfPitchAndFamily=0, lfFaceName={0x48, 0x50, 0x34, 0x38, 0, 0x7ffd, 0x4e4, 0, 0x3, 0, 0x7, 0, 0x4, 0, 0x8d04, 0x7ffd, 0x8c00, 0x7ffd, 0x8d04, 0x7ffd, 0x8c00, 0x7ffd, 0xf60c, 0x33, 0x2d5e, 0x40, 0x4, 0, 0x5070, 0xa6, 0xf638, 0}}, matrix={eM11=1.000000, eM12=0.000000, eM21=0.000000, eM22=1.000000}, can_use_bitmap=0x2000}, aveWidth=0, ppem=0xd, scale_y=1.000000, yMax=0, yMin=0, ntmFlags=0x40, fs={fsUsb={0, 0, 0, 0}, fsCsb={0x1, 0}}, base_font=(nil), GSUB_Table=0x0(nil), cache_num=0x22}
Wine-dbg>p *font->ft_face {num_faces=0x1, face_index=0, face_flags=0xa1d, style_flags=0, num_glyphs=0x101, family_name="HP48", style_name="Regular", num_fixed_sizes=0, available_sizes=(nil), num_charmaps=0x1, charmaps=0x7d040160, generic={data=0x0(nil), finalizer=(nil)}, bbox={xMin=0xffffffeb, yMin=0xffffff3c, xMax=0x411, yMax=0x383}, units_per_EM=0x3e8, ascender=0x383, descender=0xffffff3c, height=0x47e, max_advance_width=0x312, max_advance_height=0x47e, underline_position=0xffffff04, underline_thickness=0x29, glyph=0x7d104700, size=0x7d104810, charmap=(nil), driver=0x7d01c208, memory=0x7d016970, stream=0x7d104b00, sizes_list={head=0x7d03ffb0, tail=0x7d03ffb0}, autohint={data=0x0(nil), finalizer=(nil)}, extensions=0x0(nil), internal=0x7d1040e8}
Wine-dbg>p *font->ft_face->charmaps[0] {face=0x7d103da8, encoding=FT_ENCODING_MS_SYMBOL, platform_id=0x3, encoding_id=0} --- snip ---
The font provides a charmap with encoding -> FT_ENCODING_MS_SYMBOL but this fails to get selected in first place.
lf.lfCharSet -> 1 (DEFAULT_CHARSET) charset -> 0 (ANSI_CHARSET)
http://source.winehq.org/git/wine.git/blob/e6d6fbf6e94282f7063ab3d50bdc8b90a...
--- snip --- 3839 ret->ft_face = OpenFontFace(ret, face, width, height); 3840 3841 if (!ret->ft_face) 3842 { 3843 free_font( ret ); 3844 LeaveCriticalSection( &freetype_cs ); 3845 return 0; 3846 } 3847 3848 ret->ntmFlags = face->ntmFlags; 3849 3850 if (ret->charset == SYMBOL_CHARSET && 3851 select_charmap(ret->ft_face, FT_ENCODING_MS_SYMBOL)) { 3852 /* No ops */ 3853 } 3854 else if (select_charmap(ret->ft_face, FT_ENCODING_UNICODE)) { 3855 /* No ops */ 3856 } 3857 else { 3858 select_charmap(ret->ft_face, FT_ENCODING_APPLE_ROMAN); 3859 } --- snip ---
Failure of "else" select_charmap() is not handled, leading to a loophole of having no default selected at all.
Maybe if everything fails, the first available charmap (with encoding != 0) in the font's list should be selected as ultimate fallback (face->num_charmaps > 0 -> use face->charmaps[x] if encoding != 0).
$ sha1sum Debug4x_b159.exe 6861e2b45b7468984236882cc03c7e73a5762ba1 Debug4x_b159.exe
$ wine --version wine-1.3.21-159-ge398b93
--- quote --- That's all the output I've been able to extract from running winedbg. My attempts to "attach" to the pid of Debug4x to obtain a more complete backtrace failed due to the fact that "attach" is not a recognized command, despite what http://wiki.winehq.org/Backtraces?action=show&redirect=winedbg says. --- quote ---
That's because winedbg is already (automatically) attached at this point but doesn't get any useful info due to nested exceptions (delphi exception handling braindamage).
Regards
http://bugs.winehq.org/show_bug.cgi?id=27398
--- Comment #3 from butraxz@gmail.com 2013-11-24 12:16:11 CST --- This ticket has not been updated for over 900 days. Development recommends to check the status on your bug every release or two and let to be known if the bug is still present. If not, mark it fixed. If you are no longer able to put effort to this ticket, you can abandon it.
Is this still an issue with 1.7.7 or higher ?
http://bugs.winehq.org/show_bug.cgi?id=27398
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED URL|http://www.debug4x.com/ |http://www.debug4x.com/ Resolution| |FIXED
--- Comment #4 from Anastasius Focht focht@gmx.net 2013-11-26 15:06:33 CST --- Hello folks,
can't reproduce this with recent Wine version and current Debug4x v2.2, Build 168 The IDE starts fine. Resolving 'fixed'.
Download: http://www.debug4x.com/Debug4x_b168.exe
$ sha1sum Debug4x_b168.exe 1d85daf0d88516795fc72dd3db63eee67ff85e86 Debug4x_b168.exe
$ du -sh Debug4x_b168.exe 8.1M Debug4x_b168.exe
$ wine --version wine-1.7.7-163-g9ceebff
Regards
http://bugs.winehq.org/show_bug.cgi?id=27398
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #5 from Alexandre Julliard julliard@winehq.org 2013-12-06 13:44:40 CST --- Closing bugs fixed in 1.7.8.