Module: wine Branch: refs/heads/master Commit: a92fe55cce1e23dcf252f6bcdb9a08d62ed4370b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=a92fe55cce1e23dcf252f6bc...
Author: Mike McCormack mike@codeweavers.com Date: Mon Apr 17 18:17:52 2006 +0900
msi: Fix some possible NULL pointer dereferences (Coverity).
---
dlls/msi/msi.c | 3 +++ dlls/msi/package.c | 3 +++ dlls/msi/registry.c | 3 +++ dlls/msi/tests/msi.c | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index b80fe91..b2038a1 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -667,6 +667,9 @@ INSTALLSTATE WINAPI MsiQueryProductState
TRACE("%s\n", debugstr_w(szProduct));
+ if (!szProduct) + return INSTALLSTATE_INVALIDARG; + rc = MSIREG_OpenUserProductsKey(szProduct,&hkey,FALSE); if (rc != ERROR_SUCCESS) goto end; diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 24a23d6..aaf93e9 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -514,6 +514,9 @@ UINT WINAPI MsiOpenPackageExW(LPCWSTR sz
TRACE("%s %08lx %p\n", debugstr_w(szPackage), dwOptions, phPackage );
+ if( szPackage == NULL ) + return ERROR_INVALID_PARAMETER; + if( dwOptions ) FIXME("dwOptions %08lx not supported\n", dwOptions);
diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index 528070e..3ff8d3f 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -675,6 +675,9 @@ UINT WINAPI MsiEnumFeaturesW(LPCWSTR szP
TRACE("%s %ld %p %p\n",debugstr_w(szProduct),index,szFeature,szParent);
+ if( !szProduct ) + return ERROR_INVALID_PARAMETER; + r = MSIREG_OpenFeaturesKey(szProduct,&hkeyProduct,FALSE); if( r != ERROR_SUCCESS ) return ERROR_NO_MORE_ITEMS; diff --git a/dlls/msi/tests/msi.c b/dlls/msi/tests/msi.c index c9afdca..e6fd855 100644 --- a/dlls/msi/tests/msi.c +++ b/dlls/msi/tests/msi.c @@ -66,6 +66,21 @@ static void test_usefeature(void)
}
+static void test_null(void) +{ + MSIHANDLE hpkg; + UINT r; + + r = MsiOpenPackageExW(NULL, 0, &hpkg); + ok( r == ERROR_INVALID_PARAMETER,"wrong error"); + + r = MsiQueryProductStateW(NULL); + ok( r == INSTALLSTATE_INVALIDARG, "wrong return\n"); + + r = MsiEnumFeaturesW(NULL,0,NULL,NULL); + ok( r == ERROR_INVALID_PARAMETER,"wrong error"); +} + START_TEST(msi) { HMODULE hmod = GetModuleHandle("msi.dll"); @@ -73,4 +88,5 @@ START_TEST(msi) GetProcAddress(hmod, "MsiUseFeatureExA");
test_usefeature(); + test_null(); }