Module: wine Branch: master Commit: 58130dde08396f2b93481e9166f6ecae4a4446e2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=58130dde08396f2b93481e9166...
Author: Rob Shearman rob@codeweavers.com Date: Wed Mar 12 17:40:51 2008 +0000
msi: Passing NULL for szBuffer and NULL for pcchValueBuf into MsiGetProductInfo{A, W} shouldn't crash.
Add a test for this.
---
dlls/msi/msi.c | 27 ++++++++++++++++----------- dlls/msi/tests/msi.c | 4 ++++ 2 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index 85446e8..32a4173 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -722,20 +722,25 @@ static UINT WINAPI MSI_GetProductInfo(LPCWSTR szProduct, LPCWSTR szAttribute, goto done; }
- save = *pcchValueBuf; + if (pcchValueBuf) + { + save = *pcchValueBuf;
- if (lstrlenW(val) < *pcchValueBuf) - r = msi_strcpy_to_awstring(val, szValue, pcchValueBuf); - else if (szValue->str.a || szValue->str.w) - r = ERROR_MORE_DATA; + if (lstrlenW(val) < *pcchValueBuf) + r = msi_strcpy_to_awstring(val, szValue, pcchValueBuf); + else if (szValue->str.a || szValue->str.w) + r = ERROR_MORE_DATA;
- if (!badconfig) - *pcchValueBuf = lstrlenW(val); - else if (r == ERROR_SUCCESS) - { - *pcchValueBuf = save; - r = ERROR_BAD_CONFIGURATION; + if (!badconfig) + *pcchValueBuf = lstrlenW(val); + else if (r == ERROR_SUCCESS) + { + *pcchValueBuf = save; + r = ERROR_BAD_CONFIGURATION; + } } + else if (badconfig) + r = ERROR_BAD_CONFIGURATION;
if (val != empty) msi_free(val); diff --git a/dlls/msi/tests/msi.c b/dlls/msi/tests/msi.c index f82a9a9..5da8673 100644 --- a/dlls/msi/tests/msi.c +++ b/dlls/msi/tests/msi.c @@ -2233,6 +2233,10 @@ static void test_MsiGetProductInfo(void) ok(!lstrcmpA(buf, "link"), "Expected "link", got "%s"\n", buf); ok(sz == 4, "Expected 4, got %d\n", sz);
+ /* pcchBuf is NULL */ + r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, NULL, NULL); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + /* lpValueBuf is NULL */ sz = MAX_PATH; r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_HELPLINK, NULL, &sz);