Andrew Nguyen : mapi32/tests: Invoke MAPIInitialize before performing the HexFromBin tests.
Alexandre Julliard
julliard at winehq.org
Mon Feb 1 08:56:00 CST 2010
Module: wine
Branch: master
Commit: ad2fdafee9fe1f0649b55a56f1c47d1f169bfddb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ad2fdafee9fe1f0649b55a56f1c47d1f169bfddb
Author: Andrew Nguyen <arethusa26 at gmail.com>
Date: Sat Jan 30 18:58:43 2010 -0600
mapi32/tests: Invoke MAPIInitialize before performing the HexFromBin tests.
This avoids crashes with the native Outlook extended MAPI provider.
---
dlls/mapi32/tests/util.c | 21 +++++++++++++++++++--
1 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/mapi32/tests/util.c b/dlls/mapi32/tests/util.c
index c116b1f..0d1022a 100644
--- a/dlls/mapi32/tests/util.c
+++ b/dlls/mapi32/tests/util.c
@@ -31,6 +31,7 @@
static HMODULE hMapi32 = 0;
static SCODE (WINAPI *pScInitMapiUtil)(ULONG);
+static void (WINAPI *pDeinitMapiUtil)(void);
static void (WINAPI *pSwapPword)(PUSHORT,ULONG);
static void (WINAPI *pSwapPlong)(PULONG,ULONG);
static void (WINAPI *pHexFromBin)(LPBYTE,int,LPWSTR);
@@ -39,12 +40,15 @@ static UINT (WINAPI *pUFromSz)(LPCSTR);
static ULONG (WINAPI *pUlFromSzHex)(LPCSTR);
static ULONG (WINAPI *pCbOfEncoded)(LPCSTR);
static BOOL (WINAPI *pIsBadBoundedStringPtr)(LPCSTR,ULONG);
+static SCODE (WINAPI *pMAPIInitialize)(LPVOID);
+static void (WINAPI *pMAPIUninitialize)(void);
static void init_function_pointers(void)
{
hMapi32 = LoadLibraryA("mapi32.dll");
pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil at 4");
+ pDeinitMapiUtil = (void*)GetProcAddress(hMapi32, "DeinitMapiUtil at 0");
pSwapPword = (void*)GetProcAddress(hMapi32, "SwapPword at 8");
pSwapPlong = (void*)GetProcAddress(hMapi32, "SwapPlong at 8");
pHexFromBin = (void*)GetProcAddress(hMapi32, "HexFromBin at 12");
@@ -53,6 +57,8 @@ static void init_function_pointers(void)
pUlFromSzHex = (void*)GetProcAddress(hMapi32, "UlFromSzHex at 4");
pCbOfEncoded = (void*)GetProcAddress(hMapi32, "CbOfEncoded at 4");
pIsBadBoundedStringPtr = (void*)GetProcAddress(hMapi32, "IsBadBoundedStringPtr at 8");
+ pMAPIInitialize = (void*)GetProcAddress(hMapi32, "MAPIInitialize");
+ pMAPIUninitialize = (void*)GetProcAddress(hMapi32, "MAPIUninitialize");
}
static void test_SwapPword(void)
@@ -209,9 +215,9 @@ START_TEST(util)
init_function_pointers();
- if (!pScInitMapiUtil)
+ if (!pScInitMapiUtil || !pDeinitMapiUtil)
{
- win_skip("ScInitMapiUtil is not available\n");
+ win_skip("MAPI utility initialization functions are not available\n");
FreeLibrary(hMapi32);
return;
}
@@ -233,11 +239,22 @@ START_TEST(util)
test_SwapPword();
test_SwapPlong();
+
+ /* We call MAPIInitialize here for the benefit of native extended MAPI
+ * providers which crash in the HexFromBin tests when MAPIInitialize has
+ * not been called. Since MAPIInitialize is irrelevant for HexFfromBin on
+ * Wine, we do not care whether MAPIInitialize succeeds. */
+ if (pMAPIInitialize)
+ ret = pMAPIInitialize(NULL);
test_HexFromBin();
+ if (pMAPIUninitialize && ret == S_OK)
+ pMAPIUninitialize();
+
test_UFromSz();
test_UlFromSzHex();
test_CbOfEncoded();
test_IsBadBoundedStringPtr();
+ pDeinitMapiUtil();
FreeLibrary(hMapi32);
}
More information about the wine-cvs
mailing list