From 5d85497a15af1e8bd8095228faf22f29667a6d5c Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 18 Aug 2010 11:22:12 +0200 Subject: [PATCH] msi: Handle signature filenames in short|long notation. --- dlls/msi/appsearch.c | 8 +++++++- dlls/msi/tests/package.c | 25 ++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/dlls/msi/appsearch.c b/dlls/msi/appsearch.c index a516bdad1c8..dfab3960b01 100644 --- a/dlls/msi/appsearch.c +++ b/dlls/msi/appsearch.c @@ -89,7 +89,7 @@ static UINT ACTION_AppSearchGetSignature(MSIPACKAGE *package, MSISIGNATURE *sig, 'S','i','g','n','a','t','u','r','e',' ', 'w','h','e','r','e',' ','S','i','g','n','a','t','u','r','e',' ','=',' ', '\'','%','s','\'',0}; - LPWSTR minVersion, maxVersion; + LPWSTR minVersion, maxVersion, p; MSIRECORD *row; DWORD time; @@ -106,6 +106,12 @@ static UINT ACTION_AppSearchGetSignature(MSIPACKAGE *package, MSISIGNATURE *sig, /* get properties */ sig->File = msi_dup_record_field(row,2); + if ((p = strchrW(sig->File, '|'))) + { + p++; + memmove(sig->File, p, (strlenW(p) + 1) * sizeof(WCHAR)); + } + minVersion = msi_dup_record_field(row,3); if (minVersion) { diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c index ce9fc2a0b23..9e7f104e3fe 100644 --- a/dlls/msi/tests/package.c +++ b/dlls/msi/tests/package.c @@ -7507,7 +7507,7 @@ static void test_appsearch(void) UINT r; MSIHANDLE hdb; CHAR prop[MAX_PATH]; - DWORD size = MAX_PATH; + DWORD size; hdb = create_package_db(); ok ( hdb, "failed to create package database\n" ); @@ -7518,17 +7518,29 @@ static void test_appsearch(void) r = add_appsearch_entry( hdb, "'WEBBROWSERPROG', 'NewSignature1'" ); ok( r == ERROR_SUCCESS, "cannot add entry: %d\n", r ); + r = add_appsearch_entry( hdb, "'NOTEPAD', 'NewSignature2'" ); + ok( r == ERROR_SUCCESS, "cannot add entry: %d\n", r ); + r = create_reglocator_table( hdb ); ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); r = add_reglocator_entry( hdb, "'NewSignature1', 0, 'htmlfile\\shell\\open\\command', '', 1" ); ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); + r = create_drlocator_table( hdb ); + ok( r == ERROR_SUCCESS, "cannot create DrLocator table: %d\n", r ); + + r = add_drlocator_entry( hdb, "'NewSignature2', 0, 'c:\\windows\\system32', 0" ); + ok( r == ERROR_SUCCESS, "cannot create RegLocator table: %d\n", r ); + r = create_signature_table( hdb ); ok( r == ERROR_SUCCESS, "cannot create Signature table: %d\n", r ); r = add_signature_entry( hdb, "'NewSignature1', 'FileName', '', '', '', '', '', '', ''" ); - ok( r == ERROR_SUCCESS, "cannot create Signature table: %d\n", r ); + ok( r == ERROR_SUCCESS, "cannot add signature: %d\n", r ); + + r = add_signature_entry( hdb, "'NewSignature2', 'NOTEPAD.EXE|notepad.exe', '', '', '', '', '', '', ''" ); + ok( r == ERROR_SUCCESS, "cannot add signature: %d\n", r ); r = package_from_db( hdb, &hpkg ); if (r == ERROR_INSTALL_PACKAGE_REJECTED) @@ -7538,12 +7550,14 @@ static void test_appsearch(void) return; } ok( r == ERROR_SUCCESS, "failed to create package %u\n", r ); - MsiCloseHandle( hdb ); + if (r != ERROR_SUCCESS) + goto done; r = MsiDoAction( hpkg, "AppSearch" ); ok( r == ERROR_SUCCESS, "AppSearch failed: %d\n", r); + size = sizeof(prop); r = MsiGetPropertyA( hpkg, "WEBBROWSERPROG", prop, &size ); ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); todo_wine @@ -7551,6 +7565,11 @@ static void test_appsearch(void) ok( lstrlenA(prop) != 0, "Expected non-zero length\n"); } + size = sizeof(prop); + r = MsiGetPropertyA( hpkg, "NOTEPAD", prop, &size ); + ok( r == ERROR_SUCCESS, "get property failed: %d\n", r); + +done: MsiCloseHandle( hpkg ); DeleteFileA(msifile); }