[Bug 33391] New: Microsoft .NET Framework Version 2.0 x64 installer prerequisite check fails (incorrect "VersionNT64" msi property value)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Apr 14 13:30:30 CDT 2013


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 at winehq.org
        ReportedBy: focht at 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/40f3a9fa590b1e4ab785509bb389efbe4f59e964:/dlls/msi/package.c#l671

--- 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

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
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