Rob Shearman : msi: Passing NULL for szBuffer and NULL for pcchValueBuf into MsiGetProductInfo{A , W} shouldn't crash.
Module: wine Branch: master Commit: 58130dde08396f2b93481e9166f6ecae4a4446e2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=58130dde08396f2b93481e9166... Author: Rob Shearman <rob(a)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);
participants (1)
-
Alexandre Julliard