https://bugs.winehq.org/show_bug.cgi?id=55898
Bug ID: 55898 Summary: WinSCP crashes with wine-8.20 Product: Wine Version: 8.20 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: uxtheme Assignee: wine-bugs@winehq.org Reporter: bernhardu@mailbox.org Distribution: ---
WinSCP crashes with wine-8.20.
Tested with this package: https://sourceforge.net/projects/winscp/files/WinSCP/6.0.1%20beta/WinSCP-6.0...
A git bisect shows following: 29d5ce6b7a40635e2c4904ece9b8381a8132f248 is the first broken commit commit 29d5ce6b7a40635e2c4904ece9b8381a8132f248 Author: Louis Lenders xerox.xerox2000x@gmail.com Date: Tue Oct 31 07:59:03 2023 +0100 uxtheme: Add stub for AllowDarkModeForWindow.
Reverting this commit on top of wine-8.20 makes the crash go away, so looks like kind of a regression.
Running with +relay shows following: 0114:0118:Call KERNEL32.GetProcAddress(79240000,00000085) ret=00687165 0114:0118:Ret KERNEL32.GetProcAddress() retval=79241dc0 ret=00687165 0114:0118:Call KERNEL32.GetProcAddress(79240000,00000068) ret=00687165 0114:0118:Ret KERNEL32.GetProcAddress() retval=79241ce0 ret=00687165 0114:0118:Call KERNEL32.GetProcAddress(79240000,00000087) ret=00687165 0114:0118:Ret KERNEL32.GetProcAddress() retval=79241de0 ret=00687165 0114:0118:Call uxtheme.135(00000001) ret=00866406 0114:0118:fixme:uxtheme:SetPreferredAppMode 1: stub 0114:0118:Ret uxtheme.135() retval=00000000 ret=00866406 0114:0118:Call uxtheme.IsThemePartDefined(0000001e,00401876,0140255d) ret=0086640c 0114:0118:Ret uxtheme.IsThemePartDefined() retval=00000000 ret=0086640c 0114:0118:Call ntdll.NtCreateEvent(01cff8f4,001f0003,01cff8f8,00000000,00000000) ret=7b6d42d5 0114:0118:Ret ntdll.NtCreateEvent() retval=00000000 ret=7b6d42d5 wine: Unhandled page fault on execute access to 7FFD1000 at address 7FFD1000 (thread 0118), starting debugger...
Which seems to translate to this WinSCP sources: https://github.com/winscp/winscp/blob/7e61bc1e1fad5267cb4c476994ad460ffab17a...
https://bugs.winehq.org/show_bug.cgi?id=55898
Bernhard Übelacker bernhardu@mailbox.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Regression SHA1| |29d5ce6b7a40635e2c4904ece9b | |8381a8132f248 Keywords| |download, regression, | |source URL| |https://sourceforge.net/pro | |jects/winscp/files/WinSCP/6 | |.0.1%20beta/WinSCP-6.0.1.be | |ta-Portable.zip/download Distribution|--- |Debian
https://bugs.winehq.org/show_bug.cgi?id=55898
--- Comment #1 from Bernhard Übelacker bernhardu@mailbox.org --- Created merge request: https://gitlab.winehq.org/wine/wine/-/merge_requests/4394
https://bugs.winehq.org/show_bug.cgi?id=55898
Fabian Maurer dark.shadow4@web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW CC| |dark.shadow4@web.de
--- Comment #2 from Fabian Maurer dark.shadow4@web.de --- I think it would have worked if ordinal 104 was free, but it happened to be filled by "IsThemePartDefined". Therefore some random crash. Not sure if something like that can be prevented, but I'm guessing not really.
https://bugs.winehq.org/show_bug.cgi?id=55898
Bernhard Übelacker bernhardu@mailbox.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |71b3d10f953fe6f970d79916662 | |87340ac489130 Status|NEW |RESOLVED Resolution|--- |FIXED
--- Comment #3 from Bernhard Übelacker bernhardu@mailbox.org --- Got commited, so setting resolved fixed.
(In reply to Fabian Maurer from comment #2)
Not sure if something like that can be prevented, but I'm guessing not really.
Maybe when moving the start of not explicit ordinals from 1 to e.g. 10000. Might be at least useful for debugging; this would have made GetProcAddress(...,00000068) return NULL, therefore no crash whould have happened.
--- a/tools/winebuild/parser.c +++ b/tools/winebuild/parser.c @@ -918,3 +918,3 @@ static void assign_ordinals( DLLSPEC *spec )
- count = max( spec->limit + 1, spec->base + spec->nb_entry_points ); + count = max( spec->limit + 1, spec->base + spec->nb_entry_points + 10000 ); spec->ordinals = xmalloc( count * sizeof(spec->ordinals[0]) ); @@ -941,3 +941,3 @@ static void assign_ordinals( DLLSPEC *spec ) if (spec->entry_points[i].ordinal != -1) continue; - while (spec->ordinals[ordinal]) ordinal++; + while (spec->ordinals[ordinal] || ordinal < 10000) ordinal++; if (ordinal >= MAX_ORDINALS)
https://bugs.winehq.org/show_bug.cgi?id=55898
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #4 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 8.21.