Vincent Povirk : oleaut32: Make ITypeInfo2:: GetCustData succeed when data is not found.

Alexandre Julliard julliard at winehq.org
Wed Aug 26 10:44:36 CDT 2009


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Tue Aug 25 15:09:50 2009 -0500

oleaut32: Make ITypeInfo2::GetCustData succeed when data is not found.

---

 dlls/oleaut32/tests/typelib.c |   22 ++++++++++++++++++++++
 dlls/oleaut32/typelib.c       |   11 +++++------
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 2748ed0..9834d10 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -449,6 +449,7 @@ static void test_TypeInfo(void)
 {
     ITypeLib *pTypeLib;
     ITypeInfo *pTypeInfo;
+    ITypeInfo2 *pTypeInfo2;
     HRESULT hr;
     static WCHAR wszBogus[] = { 'b','o','g','u','s',0 };
     static WCHAR wszGetTypeInfo[] = { 'G','e','t','T','y','p','e','I','n','f','o',0 };
@@ -458,6 +459,8 @@ static void test_TypeInfo(void)
     OLECHAR* pwszClone = wszClone;
     DISPID dispidMember;
     DISPPARAMS dispparams;
+    GUID bogusguid = {0x806afb4f,0x13f7,0x42d2,{0x89,0x2c,0x6c,0x97,0xc3,0x6a,0x36,0xc1}};
+    VARIANT var;
 
     hr = LoadTypeLib(wszStdOle2, &pTypeLib);
     ok_ole_success(hr, LoadTypeLib);
@@ -503,6 +506,25 @@ static void test_TypeInfo(void)
     hr = ITypeInfo_GetIDsOfNames(pTypeInfo, &pwszGetTypeInfo, 1, &dispidMember);
     ok_ole_success(hr, ITypeInfo_GetIDsOfNames);
 
+    hr = ITypeInfo_QueryInterface(pTypeInfo, &IID_ITypeInfo2, (void**)&pTypeInfo2);
+    ok_ole_success(hr, ITypeInfo_QueryInterface);
+
+    if (SUCCEEDED(hr))
+    {
+        VariantInit(&var);
+
+        V_VT(&var) = VT_I4;
+
+        /* test unknown guid passed to GetCustData */
+        hr = ITypeInfo2_GetCustData(pTypeInfo2, &bogusguid, &var);
+        ok_ole_success(hr, ITypeInfo_GetCustData);
+        ok(V_VT(&var) == VT_EMPTY, "got %i, expected VT_EMPTY\n", V_VT(&var));
+
+        ITypeInfo2_Release(pTypeInfo2);
+
+        VariantClear(&var);
+    }
+
     /* test invoking a method with a [restricted] keyword */
     hr = ITypeInfo_Invoke(pTypeInfo, NULL, dispidMember, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL);
     todo_wine {
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index e87095b..b86109c 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -7047,13 +7047,12 @@ static HRESULT WINAPI ITypeInfo2_fnGetCustData(
 
     TRACE("(%p) guid %s %s found!x)\n", This, debugstr_guid(guid), pCData? "" : "NOT");
 
-    if(pCData)
-    {
-        VariantInit( pVarVal);
+    VariantInit( pVarVal);
+    if (pCData)
         VariantCopy( pVarVal, &pCData->data);
-        return S_OK;
-    }
-    return E_INVALIDARG;  /* FIXME: correct? */
+    else
+        VariantClear( pVarVal );
+    return S_OK;
 }
 
 /* ITypeInfo2::GetFuncCustData




More information about the wine-cvs mailing list