From e17ef695a2fca474e4a1a5a1db9fe1e564595b41 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Tue, 13 Sep 2005 10:37:46 +0000 Subject: [PATCH] Fix the handling of MsiDoAction args (with test case). --- dlls/msi/install.c | 39 ++++++++++++++++++--------------------- dlls/msi/tests/package.c | 24 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/dlls/msi/install.c b/dlls/msi/install.c index d8401dc2b85..3830ee4db8b 100644 --- a/dlls/msi/install.c +++ b/dlls/msi/install.c @@ -41,24 +41,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(msi); UINT WINAPI MsiDoActionA( MSIHANDLE hInstall, LPCSTR szAction ) { LPWSTR szwAction; - UINT rc; + UINT ret; - TRACE(" exteral attempt at action %s\n",szAction); - - if (!szAction) - return ERROR_FUNCTION_FAILED; - if (hInstall == 0) - return ERROR_FUNCTION_FAILED; + TRACE("%s\n", debugstr_a(szAction)); szwAction = strdupAtoW(szAction); - - if (!szwAction) + if (szAction && !szwAction) return ERROR_FUNCTION_FAILED; - - rc = MsiDoActionW(hInstall, szwAction); - HeapFree(GetProcessHeap(),0,szwAction); - return rc; + ret = MsiDoActionW( hInstall, szwAction ); + HeapFree( GetProcessHeap(), 0, szwAction ); + return ret; } /*********************************************************************** @@ -67,16 +60,20 @@ UINT WINAPI MsiDoActionA( MSIHANDLE hInstall, LPCSTR szAction ) UINT WINAPI MsiDoActionW( MSIHANDLE hInstall, LPCWSTR szAction ) { MSIPACKAGE *package; - UINT ret = ERROR_INVALID_HANDLE; + UINT ret; - TRACE(" external attempt at action %s \n",debugstr_w(szAction)); + TRACE("%s\n",debugstr_w(szAction)); + + if (!szAction) + return ERROR_INVALID_PARAMETER; + + package = msihandle2msiinfo( hInstall, MSIHANDLETYPE_PACKAGE ); + if (!package) + return ERROR_INVALID_HANDLE; + + ret = ACTION_PerformUIAction( package, szAction ); + msiobj_release( &package->hdr ); - package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE); - if( package ) - { - ret = ACTION_PerformUIAction(package,szAction); - msiobj_release( &package->hdr ); - } return ret; } diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c index d751fae9b41..f7d42884462 100644 --- a/dlls/msi/tests/package.c +++ b/dlls/msi/tests/package.c @@ -272,9 +272,33 @@ static void test_getsourcepath( void ) MsiCloseHandle( hpkg ); } +void test_doaction( void ) +{ + MSIHANDLE hpkg; + UINT r; + + r = MsiDoAction( -1, NULL ); + ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); + + hpkg = package_from_db(create_package_db()); + ok( hpkg, "failed to create package\n"); + + r = MsiDoAction(hpkg, NULL); + ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n"); + + r = MsiDoAction(0, "boo"); + ok( r == ERROR_INVALID_HANDLE, "wrong return val\n"); + + r = MsiDoAction(hpkg, "boo"); + ok( r == ERROR_FUNCTION_NOT_CALLED, "wrong return val\n"); + + MsiCloseHandle( hpkg ); +} + START_TEST(package) { test_createpackage(); test_getsourcepath_bad(); test_getsourcepath(); + test_doaction(); }