Module: wine Branch: master Commit: 45c00da4967ee98fc0fddfecec621248364b141f URL: http://source.winehq.org/git/wine.git/?a=commit;h=45c00da4967ee98fc0fddfecec...
Author: Paul Vriens Paul.Vriens.Wine@gmail.com Date: Wed May 27 11:10:07 2009 +0200
msi/tests: Prevent crash when ConvertSidToStringSidA is not available.
---
dlls/msi/tests/install.c | 20 +++++++++----------- dlls/msi/tests/package.c | 37 +++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c index 2e03bf4..a554e34 100644 --- a/dlls/msi/tests/install.c +++ b/dlls/msi/tests/install.c @@ -40,6 +40,8 @@ static UINT (WINAPI *pMsiSourceListEnumSourcesA) static UINT (WINAPI *pMsiSourceListGetInfoA) (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);
+static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*); + static HMODULE hsrclient = 0; static BOOL (WINAPI *pSRRemoveRestorePoint)(DWORD); static BOOL (WINAPI *pSRSetRestorePointA)(RESTOREPOINTINFOA*, STATEMGRSTATUS*); @@ -1316,6 +1318,7 @@ static int CDECL fci_delete(char *pszFile, int *err, void *pv) static void init_functionpointers(void) { HMODULE hmsi = GetModuleHandleA("msi.dll"); + HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
#define GET_PROC(mod, func) \ p ## func = (void*)GetProcAddress(mod, #func); \ @@ -1326,6 +1329,8 @@ static void init_functionpointers(void) GET_PROC(hmsi, MsiSourceListEnumSourcesA); GET_PROC(hmsi, MsiSourceListGetInfoA);
+ GET_PROC(hadvapi32, ConvertSidToStringSidA); + hsrclient = LoadLibraryA("srclient.dll"); GET_PROC(hsrclient, SRRemoveRestorePoint); GET_PROC(hsrclient, SRSetRestorePointA); @@ -1352,21 +1357,14 @@ static LPSTR get_user_sid(LPSTR *usersid) BYTE buf[1024]; DWORD size; PTOKEN_USER user; - static HMODULE hadvapi32 = NULL; - static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
- *usersid = NULL; - if (!hadvapi32) + if (!pConvertSidToStringSidA) { - hadvapi32 = GetModuleHandleA("advapi32.dll"); - pConvertSidToStringSidA = (void *)GetProcAddress(hadvapi32, "ConvertSidToStringSidA"); - if (!pConvertSidToStringSidA) - { - win_skip("ConvertSidToStringSidA is not available\n"); - return NULL; - } + win_skip("ConvertSidToStringSidA is not available\n"); + return NULL; }
+ *usersid = NULL; OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token); size = sizeof(buf); GetTokenInformation(token, TokenUser, buf, size, &size); diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c index 21795d5..f986125 100644 --- a/dlls/msi/tests/package.c +++ b/dlls/msi/tests/package.c @@ -34,27 +34,38 @@ char CURR_DIR[MAX_PATH];
static UINT (WINAPI *pMsiApplyMultiplePatchesA)(LPCSTR, LPCSTR, LPCSTR);
+static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*); + +static void init_functionpointers(void) +{ + HMODULE hmsi = GetModuleHandleA("msi.dll"); + HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll"); + +#define GET_PROC(mod, func) \ + p ## func = (void*)GetProcAddress(mod, #func); + + GET_PROC(hmsi, MsiApplyMultiplePatchesA); + + GET_PROC(hadvapi32, ConvertSidToStringSidA); + +#undef GET_PROC +} + + static LPSTR get_user_sid(LPSTR *usersid) { HANDLE token; BYTE buf[1024]; DWORD size; PTOKEN_USER user; - static HMODULE hadvapi32 = NULL; - static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
- *usersid = NULL; - if (!hadvapi32) + if (!pConvertSidToStringSidA) { - hadvapi32 = GetModuleHandleA("advapi32.dll"); - pConvertSidToStringSidA = (void *)GetProcAddress(hadvapi32, "ConvertSidToStringSidA"); - if (!pConvertSidToStringSidA) - { - win_skip("ConvertSidToStringSidA is not available\n"); - return NULL; - } + win_skip("ConvertSidToStringSidA is not available\n"); + return NULL; }
+ *usersid = NULL; OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token); size = sizeof(buf); GetTokenInformation(token, TokenUser, buf, size, &size); @@ -11622,9 +11633,7 @@ static void test_MsiApplyPatch(void)
START_TEST(package) { - HMODULE hmsi = GetModuleHandleA("msi.dll"); - - pMsiApplyMultiplePatchesA = (void *)GetProcAddress(hmsi, "MsiApplyMultiplePatchesA"); + init_functionpointers();
GetCurrentDirectoryA(MAX_PATH, CURR_DIR);