From a3b6054afb00619254b2b95a1b7b317e541b2685 Mon Sep 17 00:00:00 2001 From: Sven Baars Date: Fri, 4 Oct 2019 21:58:43 +0200 Subject: [PATCH] wbemprox: Fix multiple leaks in parse_path (Coverity). Signed-off-by: Sven Baars Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/wbemprox/services.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/dlls/wbemprox/services.c b/dlls/wbemprox/services.c index e1cd2466e4c..5909c02e61f 100644 --- a/dlls/wbemprox/services.c +++ b/dlls/wbemprox/services.c @@ -335,24 +335,42 @@ HRESULT parse_path( const WCHAR *str, struct path **ret ) DWORD server_len = ARRAY_SIZE(server); p++; - if (*p != '\\') return WBEM_E_INVALID_OBJECT_PATH; + if (*p != '\\') + { + heap_free( path ); + return WBEM_E_INVALID_OBJECT_PATH; + } p++; q = p; while (*p && *p != '\\') p++; - if (!*p) return WBEM_E_INVALID_OBJECT_PATH; + if (!*p) + { + heap_free( path ); + return WBEM_E_INVALID_OBJECT_PATH; + } len = p - q; if (!GetComputerNameW( server, &server_len ) || server_len != len || wcsnicmp( q, server, server_len )) + { + heap_free( path ); return WBEM_E_NOT_SUPPORTED; + } q = ++p; while (*p && *p != ':') p++; - if (!*p) return WBEM_E_INVALID_OBJECT_PATH; + if (!*p) + { + heap_free( path ); + return WBEM_E_INVALID_OBJECT_PATH; + } len = p - q; if (len != ARRAY_SIZE(cimv2W) - 1 || wcsnicmp( q, cimv2W, ARRAY_SIZE(cimv2W) - 1 )) + { + heap_free( path ); return WBEM_E_INVALID_NAMESPACE; + } p++; }