https://bugs.winehq.org/show_bug.cgi?id=53536
Bug ID: 53536 Summary: ntdll:rtl - The 32-bit RtlUlonglongByteSwap() breaks test_RtlDecompressBuffer() on Windows Product: Wine Version: unspecified Hardware: x86-64 OS: Windows Status: NEW Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: fgouget@codeweavers.com
ntdll:rtl - The 32-bit RtlUlonglongByteSwap() breaks test_RtlDecompressBuffer() on Windows:
rtl.c:2790: Running test 0 (compressed_size=6, uncompressed_size=4, status=0x00000000) rtl.c:2790: Running test 1 (compressed_size=10, uncompressed_size=8, status=0x00000000) rtl.c:2790: this is the last test seen before the exception 170c:rtl: unhandled exception c0000005 at 005542C0
https://test.winehq.org/data/patterns.html#ntdll:rtl
The crash is specific to the 32-bit build. Strangely the crashes started on 2022-07-26 despite there being no changes to this test or to the test configurations. Also, the crash still happens when testing older Wine versions.
Anyway, the crash still happens even when only keeping these two tests: test_RtlUlonglongByteSwap(); test_RtlDecompressBuffer();
The Windows headers claims that RtlUlonglongByteSwap() is a FASTCALL API but not so in Wine:
winternl.h: NTSYSAPI ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG); rtl.c: static ULONGLONG (WINAPIV *pRtlUlonglongByteSwap)(ULONGLONG source);
Replacing WINAPIV with WINAPI in rtl.c fixes the crash but it's probably not the correct fix.