From 31607505af175006c949c3fd04a44f360a2e3232 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Mon, 22 Sep 2008 12:18:12 +0000 Subject: [PATCH] fix some memory leaks (patch by Ged) svn path=/trunk/; revision=36402 --- reactos/dll/win32/advapi32/service/sctrl.c | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/reactos/dll/win32/advapi32/service/sctrl.c b/reactos/dll/win32/advapi32/service/sctrl.c index 140a6c27316..95264fb4eb6 100644 --- a/reactos/dll/win32/advapi32/service/sctrl.c +++ b/reactos/dll/win32/advapi32/service/sctrl.c @@ -702,6 +702,10 @@ StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA lpServiceStartTable) if (dwError != ERROR_SUCCESS) { /* Free the service table */ + for (i = 0; i < dwActiveServiceCount; i++) + { + RtlFreeUnicodeString(&lpActiveServices[i].ServiceName); + } RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices); lpActiveServices = NULL; dwActiveServiceCount = 0; @@ -714,6 +718,10 @@ StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA lpServiceStartTable) if (lpMessageBuffer == NULL) { /* Free the service table */ + for (i = 0; i < dwActiveServiceCount; i++) + { + RtlFreeUnicodeString(&lpActiveServices[i].ServiceName); + } RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices); lpActiveServices = NULL; dwActiveServiceCount = 0; @@ -728,6 +736,10 @@ StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA lpServiceStartTable) RtlFreeHeap(RtlGetProcessHeap(), 0, lpMessageBuffer); /* Free the service table */ + for (i = 0; i < dwActiveServiceCount; i++) + { + RtlFreeUnicodeString(&lpActiveServices[i].ServiceName); + } RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices); lpActiveServices = NULL; dwActiveServiceCount = 0; @@ -780,6 +792,10 @@ StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW lpServiceStartTable) if (dwError != ERROR_SUCCESS) { /* Free the service table */ + for (i = 0; i < dwActiveServiceCount; i++) + { + RtlFreeUnicodeString(&lpActiveServices[i].ServiceName); + } RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices); lpActiveServices = NULL; dwActiveServiceCount = 0; @@ -792,6 +808,10 @@ StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW lpServiceStartTable) if (lpMessageBuffer == NULL) { /* Free the service table */ + for (i = 0; i < dwActiveServiceCount; i++) + { + RtlFreeUnicodeString(&lpActiveServices[i].ServiceName); + } RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices); lpActiveServices = NULL; dwActiveServiceCount = 0; @@ -806,6 +826,10 @@ StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW lpServiceStartTable) RtlFreeHeap(RtlGetProcessHeap(), 0, lpMessageBuffer); /* Free the service table */ + for (i = 0; i < dwActiveServiceCount; i++) + { + RtlFreeUnicodeString(&lpActiveServices[i].ServiceName); + } RtlFreeHeap(RtlGetProcessHeap(), 0, lpActiveServices); lpActiveServices = NULL; dwActiveServiceCount = 0;