Paul Vriens : msi/tests: Prevent crash when ConvertSidToStringSidA is not available.

Alexandre Julliard julliard at winehq.org
Wed May 27 09:26:57 CDT 2009


Module: wine
Branch: master
Commit: 45c00da4967ee98fc0fddfecec621248364b141f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=45c00da4967ee98fc0fddfecec621248364b141f

Author: Paul Vriens <Paul.Vriens.Wine at 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);
 




More information about the wine-cvs mailing list