Hans Leidekker : wbemprox: Return an empty object if the path is NULL or empty.
Alexandre Julliard
julliard at winehq.org
Mon Jan 28 13:43:20 CST 2013
Module: wine
Branch: master
Commit: 07197a19f2843b41b32be2c1d07ba4cc54260a08
URL: http://source.winehq.org/git/wine.git/?a=commit;h=07197a19f2843b41b32be2c1d07ba4cc54260a08
Author: Hans Leidekker <hans at codeweavers.com>
Date: Mon Jan 28 15:56:40 2013 +0100
wbemprox: Return an empty object if the path is NULL or empty.
---
dlls/wbemprox/class.c | 4 ++--
dlls/wbemprox/services.c | 8 +++-----
dlls/wbemprox/tests/query.c | 15 ++++++++++++++-
3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c
index f47987d..5205515 100644
--- a/dlls/wbemprox/class.c
+++ b/dlls/wbemprox/class.c
@@ -1015,8 +1015,8 @@ HRESULT create_class_object( const WCHAR *name, IEnumWbemClassObject *iter, UINT
co->IWbemClassObject_iface.lpVtbl = &class_object_vtbl;
co->refs = 1;
- co->name = heap_strdupW( name );
- if (!co->name)
+ if (!name) co->name = NULL;
+ else if (!(co->name = heap_strdupW( name )))
{
heap_free( co );
return E_OUTOFMEMORY;
diff --git a/dlls/wbemprox/services.c b/dlls/wbemprox/services.c
index 4bcd824..bf202be 100644
--- a/dlls/wbemprox/services.c
+++ b/dlls/wbemprox/services.c
@@ -352,11 +352,9 @@ static HRESULT WINAPI wbem_services_GetObject(
if (lFlags) FIXME("unsupported flags 0x%08x\n", lFlags);
- if (!strObjectPath)
- {
- FIXME("no support for creating new classes\n");
- return WBEM_E_FAILED;
- }
+ if (!strObjectPath || !strObjectPath[0])
+ return create_class_object( NULL, NULL, 0, NULL, ppObject );
+
return get_object( strObjectPath, ppObject );
}
diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c
index 014bac4..dd3424f 100644
--- a/dlls/wbemprox/tests/query.c
+++ b/dlls/wbemprox/tests/query.c
@@ -146,7 +146,8 @@ static void test_Win32_Service( IWbemServices *services )
static const WCHAR stoppedW[] = {'S','t','o','p','p','e','d',0};
static const WCHAR serviceW[] = {'W','i','n','3','2','_','S','e','r','v','i','c','e','.',
'N','a','m','e','=','"','S','p','o','o','l','e','r','"',0};
- BSTR class = SysAllocString( serviceW ), method;
+ static const WCHAR emptyW[] = {0};
+ BSTR class = SysAllocString( serviceW ), empty = SysAllocString( emptyW ), method;
IWbemClassObject *service, *out;
VARIANT state, retval;
CIMTYPE type;
@@ -219,6 +220,18 @@ static void test_Win32_Service( IWbemServices *services )
}
VariantClear( &state );
IWbemClassObject_Release( service );
+
+ service = NULL;
+ hr = IWbemServices_GetObject( services, NULL, 0, NULL, &service, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+ if (service) IWbemClassObject_Release( service );
+
+ service = NULL;
+ hr = IWbemServices_GetObject( services, empty, 0, NULL, &service, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+ if (service) IWbemClassObject_Release( service );
+
+ SysFreeString( empty );
SysFreeString( class );
}
More information about the wine-cvs
mailing list