wbemprox: Return an empty object if the path is NULL or empty.

oldstable
Hans Leidekker 2013-01-28 15:56:40 +01:00 committed by Alexandre Julliard
parent 6da3ce276b
commit 07197a19f2
3 changed files with 19 additions and 8 deletions

View File

@ -1015,8 +1015,8 @@ HRESULT create_class_object( const WCHAR *name, IEnumWbemClassObject *iter, UINT
co->IWbemClassObject_iface.lpVtbl = &class_object_vtbl; co->IWbemClassObject_iface.lpVtbl = &class_object_vtbl;
co->refs = 1; co->refs = 1;
co->name = heap_strdupW( name ); if (!name) co->name = NULL;
if (!co->name) else if (!(co->name = heap_strdupW( name )))
{ {
heap_free( co ); heap_free( co );
return E_OUTOFMEMORY; return E_OUTOFMEMORY;

View File

@ -352,11 +352,9 @@ static HRESULT WINAPI wbem_services_GetObject(
if (lFlags) FIXME("unsupported flags 0x%08x\n", lFlags); if (lFlags) FIXME("unsupported flags 0x%08x\n", lFlags);
if (!strObjectPath) if (!strObjectPath || !strObjectPath[0])
{ return create_class_object( NULL, NULL, 0, NULL, ppObject );
FIXME("no support for creating new classes\n");
return WBEM_E_FAILED;
}
return get_object( strObjectPath, ppObject ); return get_object( strObjectPath, ppObject );
} }

View File

@ -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 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','.', 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}; '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; IWbemClassObject *service, *out;
VARIANT state, retval; VARIANT state, retval;
CIMTYPE type; CIMTYPE type;
@ -219,6 +220,18 @@ static void test_Win32_Service( IWbemServices *services )
} }
VariantClear( &state ); VariantClear( &state );
IWbemClassObject_Release( service ); 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 ); SysFreeString( class );
} }