http://bugs.winehq.org/show_bug.cgi?id=34571
Bug #: 34571 Summary: EasiSlides v4 crashes when clicking a folder listbox item (GdipFillPath failure) Product: Wine Version: 1.7.2 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: gdiplus AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello folks,
a user reported this app not working.
Prerequisites: 'winetricks -q dotnet20 jet40'
The app starts fine but when you click an item in the "folder" listbox it crashes with managed backtrace:
--- snip --- ************** Exception Text ************** System.ArgumentException: Parameter is not valid. at System.Drawing.Graphics.CheckErrorStatus(Int32 status) at System.Drawing.Graphics.FillPath(Brush brush, GraphicsPath path) at Easislides.gf.OutputOneLineToScreen(SongSettings InItem, String ExtractedText, Font InFont, Graphics g, Color InColour, StringAlignment alignformat, Int32 InUseShadowFont, Int32 InUseOutlineFont, Int32 x, Int32 y, Int32 w, Int32 h, Boolean IndentLeftAligned) at Easislides.gf.OutputOneLineToScreen(SongSettings InItem, String ExtractedText, Font InFont, Graphics g, Color InColour, StringAlignment alignformat, Int32 InUseShadowFont, Int32 InUseOutlineFont, Int32 x, Int32 y, Int32 w, Int32 h) at Easislides.gf.DataDisplaySlides(SongSettings InItem, Graphics& g, Font tempFont, Color In_TextColour, RectangleF rect_slidesinfo, Int32 VersesSymOffsetTop, Int32 SlidesSymOffsetTop, Int32 RectOffsetTop, Int32 OffsetLeft, Boolean DisplayIndicators) at Easislides.gf.DP_SetSlideIndicators(SongSettings InItem, ImageTransitionControl& InPic, Graphics& g, Font tempFont, RectangleF rect_slidesinfo) at Easislides.gf.DrawDisplayPanel(SongSettings InItem, Int32 InHideDisplayPanel, ImageTransitionControl& InPictureBox, Graphics g) at Easislides.gf.DrawText(SongSettings& InItem, ImageTransitionControl& InPictureBox, ListView LyricsAndNotationsList, Int32 InUseShadowFont, Int32 InUseOutlineFont, Int32 InShowNotations, Int32 InShowInterlace, Int32 InShowVerticalAlign, Int32 InHideDisplayPanel, TransitionAction TransitionAction, Boolean DoActiveIndicator, Boolean ClearAll) at Easislides.gf.ShowDBSlide(SongSettings& InItem, ImageTransitionControl& InPictureBox, Boolean DoActiveIndicator, TransitionAction TransitionAction, Boolean RedoBackground) at Easislides.gf.ShowDBSlide(SongSettings& InItem, ImageTransitionControl& PInPictureBox, ImageTransitionControl& OInPictureBox, Boolean DoActiveIndicator, TransitionAction TransitionAction) at Easislides.FrmMain.ShowSlide(SongSettings& InItem, TransitionAction TransitionAction, Boolean DoActiveIndicator) at Easislides.FrmMain.ShowSlide(SongSettings& InItem, TransitionAction TransitionAction) at Easislides.FrmMain.DisplayLyrics(SongSettings InItem, Int32 StartingSlide, Boolean ScrollToCaret, Int32 GapItemBackground, TransitionAction TransitionAction) at Easislides.FrmMain.DisplayLyrics(SongSettings InItem, Int32 StartingSlide, Boolean ScrollToCaret) at Easislides.FrmMain.LoadItem(SongSettings& InItem, String InIDString, String InFormatString, Int32 StartingSlide, String& InTitle, Boolean ScrollToCaret) at Easislides.FrmMain.SongsListIndexChanged(Int32 StartingSlide, Boolean ScrollToCaret) at Easislides.FrmMain.SongsListIndexChanged(Int32 StartingSlide) at Easislides.FrmMain.SongsListIndexChanged() at Easislides.FrmMain.SongsList_MouseUp(Object sender, MouseEventArgs e) at System.Windows.Forms.Control.OnMouseUp(MouseEventArgs e) ... --- snip ---
A relay/gdiplus trace log with more annotations ("***" msg were added):
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/EasiSlides
$ WINEDEBUG=+tid,+seh,+relay,+gdiplus wine ./Easislides.exe >>log2.txt 2>&1 ... 003b:Call gdiplus.GdipFillPath(046bb4d8,046d4538,046d41e8) ret=03876f7c 003b:trace:gdiplus:GdipFillPath (0x46bb4d8, 0x46d4538, 0x46d41e8) 003b:trace:gdiplus:GdipCreateRegionPath 0x46d41e8, 0x33dbd8 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000028) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d4648 ret=7e1eb39a 003b:trace:gdiplus:GdipClonePath (0x46d41e8, 0x46d465c) 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000018) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d4678 ret=7e1eb39a 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000000) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d4698 ret=7e1eb39a 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000000) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d46b0 ret=7e1eb39a 003b:trace:gdiplus:GdipFillRegion (0x46bb4d8, 0x46d4538, 0x46d4648) 003b:trace:gdiplus:GdipGetImageBounds 0x46bb458 0x33daf4 0x33da6c 003b:trace:gdiplus:GdipGetImageBounds returning (0.000000, 0.000000) (1440.000000, 1080.000000) unit type 2 003b:trace:gdiplus:GdipCloneRegion 0x46d4648 0x33db1c 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000028) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d46c8 ret=7e1eb39a 003b:trace:gdiplus:GdipClonePath (0x46d4678, 0x46d46dc) 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000018) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d46f8 ret=7e1eb39a 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000000) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=046d4718 ret=7e1eb39a 003b:Call ntdll.RtlAllocateHeap(00110000,00000008,00000000) ret=7e1eb39a 003b:Ret ntdll.RtlAllocateHeap() retval=0465fa98 ret=7e1eb39a 003b:fixme:gdiplus:SOFTWARE_GdipFillRegion ***1 stat=0 003b:trace:gdiplus:GdipSetMatrixElements (0x33db04, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00) 003b:trace:gdiplus:GdipMultiplyMatrix (0x33db04, 0x46bb518, 1) 003b:trace:gdiplus:GdipScaleMatrix (0x33db04, 1.00, 1.00, 1) 003b:fixme:gdiplus:SOFTWARE_GdipFillRegion ***2 stat=0 003b:trace:gdiplus:GdipTransformRegion (0x46d46c8, 0x33db04) 003b:trace:gdiplus:GdipTransformMatrixPoints (0x33db04, 0x46d4718, 0) 003b:fixme:gdiplus:transform_region_element *** RegionDataPath stat=2 003b:fixme:gdiplus:SOFTWARE_GdipFillRegion ***3 stat=2 003b:trace:gdiplus:GdipDeleteRegion 0x46d46c8 003b:trace:gdiplus:GdipDeletePath (0x46d46f8) ... 003b:trace:gdiplus:GdipDeleteRegion 0x46d4648 003b:trace:gdiplus:GdipDeletePath (0x46d4678) ... 003b:Ret gdiplus.GdipFillPath() retval=00000002 ret=03876f7c --- snip ---
The problem happens appears in GdipFillPath() -> SOFTWARE_GdipFillPath() -> GdipFillRegion() SOFTWARE_GdipFillRegion() -> GdipTransformRegion() -> transform_region_element(RegionDataPath) -> GdipTransformMatrixPoints()
"element->elementdata.pathdata.path->pathdata.Count" is zero at that point.
'winetricks gdiplus' prevents the crash and other (non fatal) graphics artifacts (see splash screen for example).
Regards