https://bugs.winehq.org/show_bug.cgi?id=49834
Bug ID: 49834 Summary: 45a63e5b3ce0e5d7fcc55ce57f315086b87f8ad7 breaks binary compatibility with 5.0 on passing main() argc Product: Wine Version: 5.9 Hardware: x86-64 OS: Linux Status: NEW Keywords: regression, source, testcase Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: dmitry@baikal.ru CC: julliard@winehq.org Regression SHA1: 45a63e5b3ce0e5d7fcc55ce57f315086b87f8ad7 Distribution: ---
Created attachment 68172 --> https://bugs.winehq.org/attachment.cgi?id=68172 test winelib module (source + binary)
I have a private winelib module compiled with stable wine-5.0.2 branch. Recently this module was broken after upgrading Wine.
I've attached test with source and pre-compiled binary using wine-5.0.2.
When running with wine-5.0.2 it looks like this:
$ wine test.exe.so Starting (argc = 1, argv = 0x113120)... Done.
$ wine test.exe.so -v Starting (argc = 2, argv = 0x1132e8)... verbose is on Done.
When running with wine-5.17 argc passed to main() is no longer valid, which makes the app try to parse not existing command like arguments:
$ wine test.exe.so -v Starting (argc = 3, argv = 0x143a10)... verbose is on Done.
$ wine test.exe.so Starting (argc = 2, argv = 0x110f48)... wine: Unhandled page fault on read access to 00000000 at address 7ECF30AF (thread 0024), starting debugger... couldn't load main module (2) Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x7ecf30af). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:7ecf30af ESP:0031fed0 EBP:0031fee8 EFLAGS:00010202( R- -- I - - - ) EAX:00000000 EBX:7ecf6000 ECX:00000028 EDX:f7ee5890 ESI:00000002 EDI:00110f48 Stack dump: 0x0031fed0: 00110f50 00110f48 0031ff00 00000002 0x0031fee0: 00110f48 00110f48 0031ff38 7ecf333b 0x0031fef0: 00000000 00000000 00110f4c 7ecf333b 0x0031ff00: 00000002 00110f48 00000000 00000000 0x0031ff10: 00000000 7dd4abb0 0000000d 00110f48 0x0031ff20: 00000000 00000000 0031ff48 7ffde000 Backtrace: =>0 0x7ecf30af (0x0031fee8) 1 0x7ecf333b (0x0031ff38) 2 0x7b655a70 in kernel32 (+0x35a6f) (0x0031ff58) 3 0x7bc7cfd7 (0x0031ff6c) 4 0x7bc7d22a (0x0031ffec) 0x7ecf30af: cmpb $0x2d,0x0(%eax) Modules: Module Address Debug info Name (3 modules) PE 7b020000-7b027000 Deferred kernelbase PE 7b620000-7b7dc000 Export kernel32 PE 7bc20000-7bc24000 Deferred ntdll
The regression is cased by
45a63e5b3ce0e5d7fcc55ce57f315086b87f8ad7 is the first bad commit commit 45a63e5b3ce0e5d7fcc55ce57f315086b87f8ad7 Author: Alexandre Julliard julliard@winehq.org Date: Sun May 17 11:44:16 2020 +0200
ntdll: Store main() arguments in the Unix library.
Signed-off-by: Alexandre Julliard julliard@winehq.org
First Wine version released with this commit is wine-5.9.