Module: wine Branch: master Commit: cb958cd7736f6c0e3a3c3c68bc74ea5531205e02 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cb958cd7736f6c0e3a3c3c68bc...
Author: James Hawkins truiken@gmail.com Date: Sun Mar 22 14:30:56 2009 -0700
msi: Test and handle the case where the SourceList key does not exist and the PackageName value does not exist in MsiGetProductInfo.
---
dlls/msi/msi.c | 11 +++++++++-- dlls/msi/tests/msi.c | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index cb05b64..93220eb 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -791,8 +791,15 @@ static UINT MSI_GetProductInfo(LPCWSTR szProduct, LPCWSTR szAttribute, if (!lstrcmpW(szAttribute, INSTALLPROPERTY_PACKAGENAMEW)) { res = RegOpenKeyW(prodkey, sourcelist, &source); - if (res == ERROR_SUCCESS) - val = msi_reg_get_value(source, szAttribute, &type); + if (res != ERROR_SUCCESS) + { + r = ERROR_UNKNOWN_PRODUCT; + goto done; + } + + val = msi_reg_get_value(source, szAttribute, &type); + if (!val) + val = empty;
RegCloseKey(source); } diff --git a/dlls/msi/tests/msi.c b/dlls/msi/tests/msi.c index 2b38ea2..6fe6656 100644 --- a/dlls/msi/tests/msi.c +++ b/dlls/msi/tests/msi.c @@ -3649,12 +3649,31 @@ static void test_MsiGetProductInfo(void) ok(!lstrcmpA(buf, "42"), "Expected "42", got "%s"\n", buf); ok(sz == 2, "Expected 2, got %d\n", sz);
+ /* SourceList key does not exist */ + sz = MAX_PATH; + lstrcpyA(buf, "apple"); + r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz); + ok(r == ERROR_UNKNOWN_PRODUCT, + "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r); + ok(!lstrcmpA(buf, "apple"), + "Expected buf to be unchanged, got "%s"\n", buf); + ok(sz == MAX_PATH, "Expected sz to be unchanged, got %d\n", sz); + res = RegCreateKeyA(prodkey, "SourceList", &source); ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ /* SourceList key exists, but PackageName val does not exist */ + sz = MAX_PATH; + lstrcpyA(buf, "apple"); + r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + ok(!lstrcmpA(buf, ""), "Expected "", got "%s"\n", buf); + ok(sz == 0, "Expected 0, got %d\n", sz); + res = RegSetValueExA(source, "PackageName", 0, REG_SZ, (LPBYTE)"packname", 9); ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ /* PackageName val exists */ sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz);