Piotr Caban : wbemprox: Return NULL signature when there are no input parameters.

Alexandre Julliard julliard at winehq.org
Wed Oct 17 18:15:42 CDT 2018


Module: wine
Branch: master
Commit: 91e4961d01ac250a717d67b2bff54c86734a6024
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=91e4961d01ac250a717d67b2bff54c86734a6024

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Oct 17 08:47:20 2018 +0200

wbemprox: Return NULL signature when there are no input parameters.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wbemprox/class.c       | 14 +++++++++++---
 dlls/wbemprox/tests/query.c |  6 ++++--
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c
index cc54fd5..983834d 100644
--- a/dlls/wbemprox/class.c
+++ b/dlls/wbemprox/class.c
@@ -839,6 +839,13 @@ HRESULT create_signature( const WCHAR *class, const WCHAR *method, enum param_di
     heap_free( query );
     if (hr != S_OK) return hr;
 
+    if (!count_instances( iter ))
+    {
+        *sig = NULL;
+        IEnumWbemClassObject_Release( iter );
+        return S_OK;
+    }
+
     if (!(name = build_signature_table_name( class, method, dir )))
     {
         IEnumWbemClassObject_Release( iter );
@@ -873,9 +880,9 @@ static HRESULT WINAPI class_object_GetMethod(
     if (hr == S_OK)
     {
         if (ppInSignature) *ppInSignature = in;
-        else IWbemClassObject_Release( in );
+        else if (in) IWbemClassObject_Release( in );
         if (ppOutSignature) *ppOutSignature = out;
-        else IWbemClassObject_Release( out );
+        else if (out) IWbemClassObject_Release( out );
     }
     else IWbemClassObject_Release( in );
     return hr;
@@ -939,7 +946,8 @@ static HRESULT WINAPI class_object_NextMethod(
     if (hr != S_OK)
     {
         SysFreeString( method );
-        IWbemClassObject_Release( *ppInSignature );
+        if (*ppInSignature)
+            IWbemClassObject_Release( *ppInSignature );
     }
     else
     {
diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c
index 168c290..95690cf 100644
--- a/dlls/wbemprox/tests/query.c
+++ b/dlls/wbemprox/tests/query.c
@@ -415,7 +415,7 @@ static void test_Win32_Process( IWbemServices *services, BOOL use_full_path )
                                         WBEM_FLAVOR_ORIGIN_PROPAGATED;
     WCHAR full_path[MAX_COMPUTERNAME_LENGTH + ARRAY_SIZE(full_path_fmt)];
     BSTR class, method;
-    IWbemClassObject *process, *out;
+    IWbemClassObject *process, *sig_in, *out;
     IWbemQualifierSet *qualifiers;
     VARIANT user, domain, retval, val;
     DWORD full_path_len = 0;
@@ -442,8 +442,10 @@ static void test_Win32_Process( IWbemServices *services, BOOL use_full_path )
         win_skip( "Win32_Process not available\n" );
         return;
     }
-    hr = IWbemClassObject_GetMethod( process, getownerW, 0, NULL, NULL );
+    sig_in = (void*)0xdeadbeef;
+    hr = IWbemClassObject_GetMethod( process, getownerW, 0, &sig_in, NULL );
     ok( hr == S_OK, "failed to get GetOwner method %08x\n", hr );
+    ok( !sig_in, "sig_in != NULL\n");
     IWbemClassObject_Release( process );
 
     out = NULL;




More information about the wine-cvs mailing list