X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=service.cpp;h=91435dbd8edd8d8d8474f5231e61c4ab5c263b8e;hb=3e92dce8716991c7100ea55f0b5e202a05c1b56d;hp=164fbc0c2fddab5238e7f2f26baeb40b81b04ed2;hpb=6adc886e1fa296f67aacef0c01994e302e8caf86;p=nssm.git diff --git a/service.cpp b/service.cpp index 164fbc0..91435db 100644 --- a/service.cpp +++ b/service.cpp @@ -562,8 +562,10 @@ int get_service_dependencies(const TCHAR *service_name, SC_HANDLE service_handle QUERY_SERVICE_CONFIG *qsc = query_service_config(service_name, service_handle); if (! qsc) return 3; - if (! qsc->lpDependencies) return 0; - if (! qsc->lpDependencies[0]) return 0; + if (! qsc->lpDependencies || ! qsc->lpDependencies[0]) { + HeapFree(GetProcessHeap(), 0, qsc); + return 0; + } /* lpDependencies is doubly NULL terminated. */ while (qsc->lpDependencies[*bufsize]) { @@ -577,6 +579,7 @@ int get_service_dependencies(const TCHAR *service_name, SC_HANDLE service_handle if (! *buffer) { *bufsize = 0; print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("lpDependencies"), _T("get_service_dependencies()")); + HeapFree(GetProcessHeap(), 0, qsc); return 4; } @@ -601,6 +604,12 @@ int get_service_dependencies(const TCHAR *service_name, SC_HANDLE service_handle HeapFree(GetProcessHeap(), 0, qsc); + if (! *buffer[0]) { + HeapFree(GetProcessHeap(), 0, *buffer); + *buffer = 0; + *bufsize = 0; + } + return 0; } @@ -1072,7 +1081,7 @@ int pre_edit_service(int argc, TCHAR **argv) { } if (! service->native) { - key = open_registry(service->name, KEY_WRITE); + key = open_registry(service->name, KEY_READ | KEY_WRITE); if (! key) { if (value.string) HeapFree(GetProcessHeap(), 0, value.string); return 4;