[Bug 9919] Microsoft Access Snapshot Viewer 10.0 install fails (GetPrivateProfileString16 must only return valid key names)
wine-bugs at winehq.org
wine-bugs at winehq.org
Mon Nov 16 09:13:19 CST 2015
https://bugs.winehq.org/show_bug.cgi?id=9919
Anastasius Focht <focht at gmx.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |focht at 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 at 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/33aa59abea2ec4dc0d2354a44ec9d0a5af43e48f:/dlls/krnl386.exe16/file.c#l538
$ sha1sum snpvw.exe
41a431279bf730c6ea0191c91370840de38e5ebc snpvw.exe
$ du -sh snpvw.exe
1.8M snpvw.exe
$ wine --version
wine-1.7.55-2-g62f05b2
Regards
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list