[PATCH 1/2] oleaut32: Handle NULL arguments to ITypeComp::BindType.

David Hedberg dhedberg at codeweavers.com
Tue Jan 11 03:10:00 CST 2011


---
 dlls/oleaut32/tests/typelib.c |   36 ++++++++++++++++++++++++++++++++++++
 dlls/oleaut32/typelib.c       |    3 +++
 2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index aabd3e7..a47a188 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -109,6 +109,7 @@ static void test_TypeComp(void)
     BINDPTR bindptr;
     ITypeInfo *pTypeInfo;
     ITypeInfo *pFontTypeInfo;
+    ITypeComp *pTypeComp_tmp;
     static WCHAR wszStdFunctions[] = {'S','t','d','F','u','n','c','t','i','o','n','s',0};
     static WCHAR wszSavePicture[] = {'S','a','v','e','P','i','c','t','u','r','e',0};
     static WCHAR wszOLE_TRISTATE[] = {'O','L','E','_','T','R','I','S','T','A','T','E',0};
@@ -255,6 +256,41 @@ static void test_TypeComp(void)
     ok(!pTypeInfo, "pTypeInfo should have been set to NULL\n");
     ok(!bindptr.lptcomp, "bindptr should have been set to NULL\n");
 
+    /* test basic BindType argument handling */
+    ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszGUID);
+    hr = ITypeComp_BindType(pTypeComp, wszGUID, ulHash, NULL, NULL);
+    ok(hr == E_INVALIDARG, "Got %08x\n", hr);
+
+    ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszGUID);
+    pTypeInfo = (void*)0xdeadbeef;
+    hr = ITypeComp_BindType(pTypeComp, wszGUID, ulHash, &pTypeInfo, NULL);
+    ok(hr == E_INVALIDARG, "Got %08x\n", hr);
+    ok(pTypeInfo == (void*)0xdeadbeef, "Got %p\n", pTypeInfo);
+
+    ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszGUID);
+    pTypeComp_tmp = (void*)0xdeadbeef;
+    hr = ITypeComp_BindType(pTypeComp, wszGUID, ulHash, NULL, &pTypeComp_tmp);
+    ok(hr == E_INVALIDARG, "Got %08x\n", hr);
+    ok(pTypeComp_tmp == (void*)0xdeadbeef, "Got %p\n", pTypeComp_tmp);
+
+    ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszGUID);
+    pTypeComp_tmp = (void*)0xdeadbeef;
+    pTypeInfo = (void*)0xdeadbeef;
+    hr = ITypeComp_BindType(pTypeComp, NULL, ulHash, &pTypeInfo, &pTypeComp_tmp);
+    ok(hr == E_INVALIDARG, "Got %08x\n", hr);
+    ok(pTypeInfo == (void*)0xdeadbeef, "Got %p\n", pTypeInfo);
+    ok(pTypeComp_tmp == (void*)0xdeadbeef, "Got %p\n", pTypeComp_tmp);
+
+    ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszGUID);
+    pTypeComp_tmp = (void*)0xdeadbeef;
+    pTypeInfo = (void*)0xdeadbeef;
+    hr = ITypeComp_BindType(pTypeComp, wszGUID, ulHash, &pTypeInfo, &pTypeComp_tmp);
+    ok_ole_success(hr, ITypeComp_BindType);
+    ok(pTypeInfo != NULL, "Got NULL pTypeInfo\n");
+    todo_wine ok(pTypeComp_tmp == NULL, "Got pTypeComp_tmp %p\n", pTypeComp_tmp);
+    ITypeInfo_Release(pTypeInfo);
+    if(pTypeComp_tmp) ITypeComp_Release(pTypeComp_tmp); /* fixme */
+
     ITypeComp_Release(pTypeComp);
 
     /* tests for ITypeComp on an interface */
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 854b165..91da30a 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -4908,6 +4908,9 @@ static HRESULT WINAPI ITypeLibComp_fnBindType(
 
     TRACE("(%s, %x, %p, %p)\n", debugstr_w(szName), lHash, ppTInfo, ppTComp);
 
+    if(!szName || !ppTInfo || !ppTComp)
+        return E_INVALIDARG;
+
     for (pTypeInfo = This->pTypeInfo; pTypeInfo; pTypeInfo = pTypeInfo->next)
     {
         /* FIXME: should use lHash to do the search */
-- 
1.7.4.rc1




More information about the wine-patches mailing list