Module: wine Branch: master Commit: 280af52666f66fc8185f9c482d254783550e87b0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=280af52666f66fc8185f9c482d...
Author: Hans Leidekker hans@codeweavers.com Date: Thu Mar 22 11:02:54 2012 +0100
msi: Mask off modifiers before setting the UILevel property.
Spotted by Aric Stewart.
---
dlls/msi/package.c | 6 +++--- dlls/msi/tests/package.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 25d00b4..43c6ff9 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -1154,9 +1154,9 @@ void msi_adjust_privilege_properties( MSIPACKAGE *package )
MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url ) { - static const WCHAR szpi[] = {'%','i',0}; + static const WCHAR fmtW[] = {'%','u',0}; MSIPACKAGE *package; - WCHAR uilevel[10]; + WCHAR uilevel[11]; UINT r;
TRACE("%p\n", db); @@ -1181,7 +1181,7 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url ) set_installed_prop( package ); set_installer_properties( package );
- sprintfW(uilevel,szpi,gUILevel); + sprintfW( uilevel, fmtW, gUILevel & INSTALLUILEVEL_MASK ); msi_set_property(package->db, szUILevel, uilevel);
r = msi_load_summary_properties( package ); diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c index 9808dfa..5a2ce9e 100644 --- a/dlls/msi/tests/package.c +++ b/dlls/msi/tests/package.c @@ -10031,6 +10031,7 @@ static void test_installprops(void) UINT r; REGSAM access = KEY_ALL_ACCESS; SYSTEM_INFO si; + INSTALLUILEVEL uilevel;
if (is_wow64) access |= KEY_WOW64_64KEY; @@ -10039,6 +10040,8 @@ static void test_installprops(void) lstrcat(path, "\"); lstrcat(path, msifile);
+ uilevel = MsiSetInternalUI(INSTALLUILEVEL_BASIC|INSTALLUILEVEL_SOURCERESONLY, NULL); + hdb = create_package_db(); ok( hdb, "failed to create database\n");
@@ -10046,6 +10049,7 @@ static void test_installprops(void) if (r == ERROR_INSTALL_PACKAGE_REJECTED) { skip("Not enough rights to perform tests\n"); + MsiSetInternalUI(uilevel, NULL); DeleteFile(msifile); return; } @@ -10053,6 +10057,21 @@ static void test_installprops(void)
MsiCloseHandle(hdb);
+ buf[0] = 0; + size = MAX_PATH; + r = MsiGetProperty(hpkg, "UILevel", buf, &size); + ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); + ok( !lstrcmp(buf, "3"), "Expected "3", got "%s"\n", buf); + + MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); + + buf[0] = 0; + size = MAX_PATH; + r = MsiGetProperty(hpkg, "UILevel", buf, &size); + ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); + ok( !lstrcmp(buf, "3"), "Expected "3", got "%s"\n", buf); + + buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "DATABASE", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); @@ -10071,6 +10090,7 @@ static void test_installprops(void) RegQueryValueEx(hkey2, "RegisteredOwner", NULL, &type, (LPBYTE)path, &size); }
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "USERNAME", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); @@ -10088,37 +10108,44 @@ static void test_installprops(void)
if (*path) { + buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "COMPANYNAME", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); ok( !lstrcmp(buf, path), "Expected %s, got %s\n", path, buf); }
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "VersionDatabase", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); trace("VersionDatabase = %s\n", buf);
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "VersionMsi", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); trace("VersionMsi = %s\n", buf);
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "Date", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); trace("Date = %s\n", buf);
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "Time", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); trace("Time = %s\n", buf);
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "PackageCode", buf, &size); ok( r == ERROR_SUCCESS, "failed to get property: %d\n", r); trace("PackageCode = %s\n", buf);
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "ComputerName", buf, &size); ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS got %d\n", r); @@ -10127,18 +10154,21 @@ static void test_installprops(void) langid = GetUserDefaultLangID(); sprintf(path, "%d", langid);
+ buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "UserLanguageID", buf, &size); ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS got %d\n", r); ok( !lstrcmpA(buf, path), "Expected "%s", got "%s"\n", path, buf);
res = GetSystemMetrics(SM_CXSCREEN); + buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "ScreenX", buf, &size); ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS got %d\n", r); ok(atol(buf) == res, "Expected %d, got %ld\n", res, atol(buf));
res = GetSystemMetrics(SM_CYSCREEN); + buf[0] = 0; size = MAX_PATH; r = MsiGetProperty(hpkg, "ScreenY", buf, &size); ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS got %d\n", r); @@ -10350,6 +10380,7 @@ static void test_installprops(void) CloseHandle(hkey2); MsiCloseHandle(hpkg); DeleteFile(msifile); + MsiSetInternalUI(uilevel, NULL); }
static void test_launchconditions(void)