http://bugs.winehq.org/show_bug.cgi?id=33391
Bug #: 33391 Summary: Microsoft .NET Framework Version 2.0 x64 installer prerequisite check fails (incorrect "VersionNT64" msi property value) Product: Wine Version: 1.5.28 Platform: x86-64 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: msi AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello folks,
while investigating some 64-bit application installer I found a problem with "VersionNT64" msi installer property.
--- snip --- 0027:trace:msi:MSI_EvaluateConditionW L"( ((VersionNT64 < 502) OR (VersionNT64 = 502 AND WindowsBuild < 3506)) )" ... 0027:trace:msi:MSI_EvaluateConditionW 1 <- L"( ((VersionNT64 < 502) OR (VersionNT64 = 502 AND WindowsBuild < 3506)) )" 0027:trace:msi:ACTION_PerformAction Performing action (L"CA_Check64OS.3643236F_FC70_11D3_A536_0090278A1BB8") ... --- snip ---
It's ok to fail in Windows XP mode (VersionNT64 should be 501) but to my surprise it also failed in later WinVer settings (Windows 2003, ...).
The reason is a "reuse" of string buffer which ought to hold WinVer encoded as MajorVersion * 100 + MinorVersion.
Source: http://source.winehq.org/git/wine.git/blob/40f3a9fa590b1e4ab785509bb389efbe4...
--- snip --- 671 static VOID set_installer_properties(MSIPACKAGE *package) 672 { 673 WCHAR *ptr; 674 OSVERSIONINFOEXW OSVersion; 675 MEMORYSTATUSEX msex; 676 DWORD verval, len; 677 WCHAR pth[MAX_PATH], verstr[11], bufstr[22]; ... 860 /* set the os things */ 861 OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); 862 GetVersionExW((OSVERSIONINFOW *)&OSVersion); 863 verval = OSVersion.dwMinorVersion + OSVersion.dwMajorVersion * 100; 864 len = sprintfW( verstr, szFormat, verval ); 865 switch (OSVersion.dwPlatformId) 866 { 867 case VER_PLATFORM_WIN32_WINDOWS: 868 msi_set_property( package->db, szVersion9x, verstr, len ); 869 break; 870 case VER_PLATFORM_WIN32_NT: 871 msi_set_property( package->db, szVersionNT, verstr, len ); 872 len = sprintfW( verstr, szFormat,OSVersion.wProductType ); 873 msi_set_property( package->db, szMsiNTProductType, verstr, len ); 874 break; 875 } 876 len = sprintfW( verstr, szFormat, OSVersion.dwBuildNumber ); 877 msi_set_property( package->db, szWindowsBuild, verstr, len ); 878 len = sprintfW( verstr, szFormat, OSVersion.wServicePackMajor ); 879 msi_set_property( package->db, szServicePackLevel, verstr, len ); 880 881 len = sprintfW( bufstr, szFormat2, MSI_MAJORVERSION, MSI_MINORVERSION ); 882 msi_set_property( package->db, szVersionMsi, bufstr, len ); 883 len = sprintfW( bufstr, szFormat, MSI_MAJORVERSION * 100 ); 884 msi_set_property( package->db, szVersionDatabase, bufstr, len ); 885 886 GetNativeSystemInfo( &sys_info ); 887 len = sprintfW( bufstr, szIntFormat, sys_info.wProcessorLevel ); 888 msi_set_property( package->db, szIntel, bufstr, len ); 889 if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) 890 { ... 902 } 903 else if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) 904 { 905 msi_set_property( package->db, szMsiAMD64, bufstr, -1 ); 906 msi_set_property( package->db, szMsix64, bufstr, -1 ); 907 msi_set_property( package->db, szVersionNT64, verstr, -1 ); ... --- snip ---
"verstr" is overwritten several times. At the point of setting "szVersionNT64" msi property, "verstr" simply contains the last string buffer "reuse" value which is obviously not what we want here ...
Regards
http://bugs.winehq.org/show_bug.cgi?id=33391
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download URL| |https://www.microsoft.com/e | |n-us/download/confirmation. | |aspx?id=6523
http://bugs.winehq.org/show_bug.cgi?id=33391
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |Installer
http://bugs.winehq.org/show_bug.cgi?id=33391
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |ca025a525d50f253a7e450b8ac0 | |1898f1f02eba1 Status|NEW |RESOLVED Resolution| |FIXED
--- Comment #1 from Austin English austinenglish@gmail.com 2013-04-15 14:02:59 CDT --- http://source.winehq.org/git/wine.git/commitdiff/ca025a525d50f253a7e450b8ac0...
http://bugs.winehq.org/show_bug.cgi?id=33391
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|FIXED |
--- Comment #2 from Anastasius Focht focht@gmx.net 2013-04-15 18:09:30 CDT --- Hello Austin,
usually I don't mind when my bug reports get resolution "fixed" as I assume it was verified by the resolver. I rely on that and don't do retesting ... until curiosity kills me.
"verstr" buffer is still reused/overwritten (by "MsiNTProductType" property).
Example: WinVer = Win7
--- snip --- 0027:trace:msi:msi_get_property returning L"1" for property L"VersionNT64" ... 0027:trace:msi:msi_get_property returning L"7601" for property L"WindowsBuild" ... 0027:trace:msi:MSI_EvaluateConditionW 1 <- L"( ((VersionNT64 < 502) OR (VersionNT64 = 502 AND WindowsBuild < 3506)) )" --- snip ---
Debugger session:
---snip --- Wine-dbg>n 871 msi_set_property( package->db, szVersionNT, verstr, len ); Wine-dbg>info locals 0x00007f05656dc4a4 set_installer_properties+0x99b: (0075daf0) MSIPACKAGE* package=0xaac050 (parameter [RBP-1192]) WCHAR* ptr="\users\focht\Temp" (local [RBP-40]) OSVERSIONINFOEXW OSVersion={dwOSVersionInfoSize=0x11c, dwMajorVersion=0x6, dwMinorVersion=0x1, dwBuildNumber=0x1db1, dwPlatformId=0x2, szCSDVersion={0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x20, 0x31, 0, 0x75, 0, 0, 0xb233, 0x656b, 0x7f05, 0, 0xc000, 0xaa, 0, 0, 0x2, 0, 0, 0, 0x6990, 0xab, 0, 0, 0x5e98, 0xab, 0, 0, 0xd9d0, 0x75, 0, 0, 0x6990, 0xab, 0, 0, 0x4, 0x8000, 0, 0, 0, 0, 0, 0, 0xbb0e, 0x656d, 0x7f05, 0, 0, 0, 0, 0, 0xbb0d, 0x656d, 0x7f05, 0, 0, 0, 0, 0, 0x247, 0, 0x3dc, 0, 0xd23, 0, 0x1ce, 0, 0x258, 0, 0x7c, 0, 0x2ff6, 0, 0x236, 0, 0x286, 0, 0x285, 0, 0x283, 0, 0x282, 0, 0x1e86, 0, 0x2aeb, 0, 0x21c9, 0, 0x4d36, 0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, wServicePackMajor=0x1, wServicePackMinor=0, wSuiteMask=0, wProductType=1, wReserved=0} (local [RBP-432]) ... WCHAR --none--[11] verstr={0x36, 0x30, 0x31, 0, 0x3118, 0, 0x595, 0, 0x247, 0, 0x3dc} (local [RBP-1056]) ... Wine-dbg>n 872 len = sprintfW( verstr, szFormat,OSVersion.wProductType ); Wine-dbg>n 873 msi_set_property( package->db, szMsiNTProductType, verstr, len ); Wine-dbg>p verstr {0x31, 0, 0x31, 0, 0x3118, 0, 0x595, 0, 0x247, 0, 0x3dc} ---snip ---
Regards
http://bugs.winehq.org/show_bug.cgi?id=33391
Julian Rüger jr98@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jr98@gmx.net
http://bugs.winehq.org/show_bug.cgi?id=33391
--- Comment #3 from Bruno Jesus 00cpxxx@gmail.com 2013-04-17 15:22:33 CDT --- Another patch related to this bug was commited: http://source.winehq.org/git/wine.git/?a=commit;h=27a1a9a862eb06fc94e6e7f34f...
http://bugs.winehq.org/show_bug.cgi?id=33391
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1|ca025a525d50f253a7e450b8ac0 |27a1a9a862eb06fc94e6e7f34f5 |1898f1f02eba1 |f28fec05fdc0f Status|REOPENED |RESOLVED Resolution| |FIXED
--- Comment #4 from Anastasius Focht focht@gmx.net 2013-04-17 15:56:18 CDT --- Hello folks,
fixed by commit http://source.winehq.org/git/wine.git/commitdiff/27a1a9a862eb06fc94e6e7f34f5...
Thanks Hans.
The installer needs at least WinVer "Windows 2003". It still fails in the end - but that's bug 24196
Regards
http://bugs.winehq.org/show_bug.cgi?id=33391
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #5 from Alexandre Julliard julliard@winehq.org 2013-04-26 13:16:34 CDT --- Closing bugs fixed in 1.5.29.
http://bugs.winehq.org/show_bug.cgi?id=33391
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |dotnet, win64
https://bugs.winehq.org/show_bug.cgi?id=33391
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- URL|https://www.microsoft.com/e |https://web.archive.org/web |n-us/download/confirmation. |/20100925191339/http://down |aspx?id=6523 |load.microsoft.com/download | |/a/3/f/a3f1bf98-18f3-4036-9 | |b68-8e6de530ce0a/NetFx64.ex | |e