Module: wine Branch: master Commit: 8c528d8d315afb3c0ebdc5149e3b6b41068286b4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=8c528d8d315afb3c0ebdc5149...
Author: Hans Leidekker hans@codeweavers.com Date: Fri Mar 5 11:22:57 2021 +0100
wbemprox: Fix memory leaks on error paths.
Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wbemprox/reg.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/dlls/wbemprox/reg.c b/dlls/wbemprox/reg.c index edcdb1902f1..e5a45b1b600 100644 --- a/dlls/wbemprox/reg.c +++ b/dlls/wbemprox/reg.c @@ -430,7 +430,11 @@ HRESULT reg_get_stringvalue( IWbemClassObject *obj, IWbemContext *context, IWbem hr = IWbemClassObject_Get( in, L"sSubKeyName", 0, &subkey, NULL, NULL ); if (hr != S_OK) return hr; hr = IWbemClassObject_Get( in, L"sValueName", 0, &name, NULL, NULL ); - if (hr != S_OK) return hr; + if (hr != S_OK) + { + VariantClear( &subkey ); + return hr; + }
hr = create_signature( L"StdRegProv", L"GetStringValue", PARAM_OUT, &sig ); if (hr != S_OK) @@ -508,9 +512,18 @@ HRESULT reg_set_stringvalue( IWbemClassObject *obj, IWbemContext *context, IWbem hr = IWbemClassObject_Get( in, L"sSubKeyName", 0, &subkey, NULL, NULL ); if (hr != S_OK) return hr; hr = IWbemClassObject_Get( in, L"sValueName", 0, &name, NULL, NULL ); - if (hr != S_OK) return hr; + if (hr != S_OK) + { + VariantClear( &subkey ); + return hr; + } hr = IWbemClassObject_Get( in, L"sValue", 0, &value, NULL, NULL ); - if (hr != S_OK) return hr; + if (hr != S_OK) + { + VariantClear( &name ); + VariantClear( &subkey ); + return hr; + }
hr = create_signature( L"StdRegProv", L"SetStringValue", PARAM_OUT, &sig ); if (hr != S_OK) @@ -582,9 +595,18 @@ HRESULT reg_set_dwordvalue( IWbemClassObject *obj, IWbemContext *context, IWbemC hr = IWbemClassObject_Get( in, L"sSubKeyName", 0, &subkey, NULL, NULL ); if (hr != S_OK) return hr; hr = IWbemClassObject_Get( in, L"sValueName", 0, &name, NULL, NULL ); - if (hr != S_OK) return hr; + if (hr != S_OK) + { + VariantClear( &subkey ); + return hr; + } hr = IWbemClassObject_Get( in, L"uValue", 0, &value, NULL, NULL ); - if (hr != S_OK) return hr; + if (hr != S_OK) + { + VariantClear( &name ); + VariantClear( &subkey ); + return hr; + }
hr = create_signature( L"StdRegProv", L"SetDWORDValue", PARAM_OUT, &sig ); if (hr != S_OK)