Gijs Vermeulen : wbemprox: Don't crash in IWbemClassObject::Put() when called with empty class object.
Alexandre Julliard
julliard at winehq.org
Tue Aug 11 16:26:50 CDT 2020
Module: wine
Branch: master
Commit: c3bd08b02299e3ac89b708ff3bd4bda262ec6bde
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c3bd08b02299e3ac89b708ff3bd4bda262ec6bde
Author: Gijs Vermeulen <gijsvrm at gmail.com>
Date: Tue Aug 11 12:01:47 2020 +0200
wbemprox: Don't crash in IWbemClassObject::Put() when called with empty class object.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=40945
Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wbemprox/class.c | 3 +++
dlls/wbemprox/tests/query.c | 9 ++++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/wbemprox/class.c b/dlls/wbemprox/class.c
index 1a00cfc40a..e048fb3db8 100644
--- a/dlls/wbemprox/class.c
+++ b/dlls/wbemprox/class.c
@@ -460,6 +460,9 @@ static HRESULT WINAPI class_object_Put(
if ((hr = get_column_index( co->record->table, wszName, &index )) != S_OK) return hr;
return record_set_value( co->record, index, pVal );
}
+
+ if (!ec) return S_OK;
+
return put_propval( ec->query->view, co->index, wszName, pVal, Type );
}
diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c
index df0c26aa97..17942cd89a 100644
--- a/dlls/wbemprox/tests/query.c
+++ b/dlls/wbemprox/tests/query.c
@@ -259,7 +259,7 @@ static void test_Win32_Service( IWbemServices *services )
{
BSTR class = SysAllocString( L"Win32_Service.Name=\"Spooler\"" ), empty = SysAllocString( L"" ), method;
IWbemClassObject *service, *out;
- VARIANT state, retval;
+ VARIANT state, retval, classvar;
CIMTYPE type;
HRESULT hr;
@@ -339,6 +339,13 @@ static void test_Win32_Service( IWbemServices *services )
hr = IWbemServices_GetObject( services, NULL, 0, NULL, &service, NULL );
ok( hr == S_OK, "got %08x\n", hr );
ok( !!service, "expected non-NULL service\n" );
+
+ VariantInit(&classvar);
+ V_VT(&classvar) = VT_BSTR;
+ V_BSTR(&classvar) = SysAllocString(L"MyClass");
+ hr = IWbemClassObject_Put(service, L"__CLASS", 0, &classvar, 0);
+ ok( hr == S_OK, "got %08x\n", hr );
+ VariantClear(&classvar);
IWbemClassObject_Release( service );
service = NULL;
More information about the wine-cvs
mailing list