https://bugs.winehq.org/show_bug.cgi?id=9919
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Hardware|Other |x86 Summary|Microsoft Access Snapshot |Microsoft Access Snapshot |Viewer 10.0 install fails |Viewer 10.0 install fails | |(GetPrivateProfileString16 | |must only return valid key | |names) OS|other |Linux Severity|minor |normal
--- Comment #15 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
It's a valid Wine bug and can be easily fixed.
The analysis from comment #3 is wrong, it has nothing to do with the 16-bit extraction tool.
There is an ini-style file for the bootstrap installer, named "setup.lst". It has the following content:
--- snip --- [Params] WndTitle = Snapshot Viewer WndMess = Starting Snapshot Viewer Setup... TmpDirSize = 2000 TmpDirName = ~msstfqf.t CmdLine = acmsetup /T snap90.stf /S %s %s CabinetFile = SNAP901.CAB DrvModeName = ACMSETUP DrvWinClass = Stuff-Shell Require31 = "This program requires Windows (R) 3.51 or higher." [Files] license.txt = license.txt @acmsetup.exe = acmsetup.exe @mssetup.dll = mssetup.dll @msacccah.dll = msacccah.dll @acmsetup.hlp = acmsetup.hlp snap90.stf = snap90.stf snap90.inf = snap90.inf @snap_bb.dll = snap_bb.dll oleaut32.dll = 32autole.dll le.dll --- snip ---
It seems someone at Microsoft added the last line (= invalid key/name entry) by mistake which triggers the bug in Wine.
'setup.exe' -> bootstrap installer, extracted from 'snpvw.exe'.
--- snip --- $ WINEDEBUG=+tid,+seh,+relay,+profile wine ./setup.exe >>log.txt 2>&1 ... 002a:Call KERNEL.128: GETPRIVATEPROFILESTRING(11ef001c "Files",00000000 (null),11e72d46 "",11ef:59e2,0259,11ef55ea "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=11e7:1c5f ds=11ef 002a:Call ntdll.RtlAllocateHeap(00110000,00000000,00000259) ret=7e98dfda 002a:Ret ntdll.RtlAllocateHeap() retval=001634e0 ret=7e98dfda 002a:Call KERNEL32.GetPrivateProfileSectionA(003a47b4 "Files",001634e0,00000259,003a9d82 "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=7e98e00f 002a:trace:profile:GetPrivateProfileSectionW (L"Files", 0x167bd8, 1202, L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") 002a:trace:profile:PROFILE_Open path: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open MRU Filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST", new filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:is_not_current 0d103940;13c29f6c 002a:trace:profile:PROFILE_Open (L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST"): already opened (mru=0) 002a:trace:profile:PROFILE_GetSection L"Files",0x167bd8,1202 002a:Ret KERNEL32.GetPrivateProfileSectionA() retval=000000e8 ret=7e98e00f 002a:Call ntdll.RtlFreeHeap(00110000,00000000,001634e0) ret=7e98e1c8 002a:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7e98e1c8 002a:Ret KERNEL.128: GETPRIVATEPROFILESTRING() retval=0000007a ret=11e7:1c5f ds=11ef ... 002a:Call KERNEL.128: GETPRIVATEPROFILESTRING(11ef001c "Files",11ef59e2 "license.txt",11e72d46 "",11ef:520a,0080,11ef55ea "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=11e7:1d22 ds=11ef 002a:Call KERNEL32.GetPrivateProfileStringA(003a47b4 "Files",003aa17a "license.txt",003a39f6 "",003a99a2,00000080,003a9d82 "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=7e98e236 002a:trace:profile:GetPrivateProfileStringW L"Files",L"license.txt",L"",0x1669e8,128,L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open path: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open MRU Filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST", new filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:is_not_current 0d103940;13c2b452 002a:trace:profile:PROFILE_Open (L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST"): already opened (mru=0) 002a:trace:profile:PROFILE_GetString (L"Files",L"license.txt",L""): returning L"license.txt" 002a:trace:profile:GetPrivateProfileStringW returning L"license.txt", 11 002a:Ret KERNEL32.GetPrivateProfileStringA() retval=0000000b ret=7e98e236 002a:Ret KERNEL.128: GETPRIVATEPROFILESTRING() retval=0000000b ret=11e7:1d22 ds=11ef ... 002a:Call KERNEL.128: GETPRIVATEPROFILESTRING(11ef001c "Files",11ef5a48 "oleaut32.dll",11e72d46 "",11ef:520a,0080,11ef55ea "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=11e7:1d22 ds=11ef 002a:Call KERNEL32.GetPrivateProfileStringA(003a47b4 "Files",003aa1e0 "oleaut32.dll",003a39f6 "",003a99a2,00000080,003a9d82 "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=7e98e236 002a:trace:profile:GetPrivateProfileStringW L"Files",L"oleaut32.dll",L"",0x1669e8,128,L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open path: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open MRU Filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST", new filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:is_not_current 0d103940;13c35f74 002a:trace:profile:PROFILE_Open (L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST"): already opened (mru=0) 002a:trace:profile:PROFILE_GetString (L"Files",L"oleaut32.dll",L""): returning L"32autole.dll" 002a:trace:profile:GetPrivateProfileStringW returning L"32autole.dll", 12 002a:Ret KERNEL32.GetPrivateProfileStringA() retval=0000000c ret=7e98e236 002a:Ret KERNEL.128: GETPRIVATEPROFILESTRING() retval=0000000c ret=11e7:1d22 ds=11ef ... 002a:Call KERNEL.128: GETPRIVATEPROFILESTRING(11ef001c "Files",11ef5a55 "le.dll",11e72d46 "",11ef:520a,0080,11ef55ea "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=11e7:1d22 ds=11ef 002a:Call KERNEL32.GetPrivateProfileStringA(003a47b4 "Files",003aa1ed "le.dll",003a39f6 "",003a99a2,00000080,003a9d82 "Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST") ret=7e98e236 002a:trace:profile:GetPrivateProfileStringW L"Files",L"le.dll",L"",0x1669e8,128,L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open path: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:PROFILE_Open MRU Filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST", new filename: L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST" 002a:trace:profile:is_not_current 0d103940;13c372de 002a:trace:profile:PROFILE_Open (L"Z:\home\focht\DOWN~NTG\IXP000.TMP\setup.LST"): already opened (mru=0) 002a:trace:profile:PROFILE_GetString (L"Files",L"le.dll",L""): returning L"" 002a:trace:profile:GetPrivateProfileStringW returning L"", 0 002a:Ret KERNEL32.GetPrivateProfileStringA() retval=00000000 ret=7e98e236 002a:Ret KERNEL.128: GETPRIVATEPROFILESTRING() retval=00000000 ret=11e7:1d22 ds=11ef ... 002a:Call USER.1: MESSAGEBOX(004c,11ef4dec "A Setup initialization file has been corrupted.",11ef518c "Setup Initialization Error",0010) ret=11e7:023f ds=11ef --- snip ---
As already said, the last entry from the 'Files' section, 'le.dll' is invalid hence must not be returned from 'GetPrivateProfileString16( section, NULL, ...)' which ought to return all *valid* key names from the specified section (string array).
The two implementations of 'GetPrivateProfileString': 16-bit 'GetPrivateProfileString16' and 32-bit 'GetPrivateProfileStringA/W' are independent and the 16-bit implementation must be fixed.
Source: https://source.winehq.org/git/wine.git/blob/33aa59abea2ec4dc0d2354a44ec9d0a5...
$ sha1sum snpvw.exe 41a431279bf730c6ea0191c91370840de38e5ebc snpvw.exe
$ du -sh snpvw.exe 1.8M snpvw.exe
$ wine --version wine-1.7.55-2-g62f05b2
Regards