git://git.iain.cx/iain
/
nssm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't leak memory in get_service_dependencies().
[nssm.git]
/
service.cpp
diff --git
a/service.cpp
b/service.cpp
index
79c2f56
..
91435db
100644
(file)
--- 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);
\r
if (! qsc) return 3;
\r
\r
QUERY_SERVICE_CONFIG *qsc = query_service_config(service_name, service_handle);
\r
if (! qsc) return 3;
\r
\r
- if (! qsc->lpDependencies) return 0;
\r
- if (! qsc->lpDependencies[0]) return 0;
\r
+ if (! qsc->lpDependencies || ! qsc->lpDependencies[0]) {
\r
+ HeapFree(GetProcessHeap(), 0, qsc);
\r
+ return 0;
\r
+ }
\r
\r
/* lpDependencies is doubly NULL terminated. */
\r
while (qsc->lpDependencies[*bufsize]) {
\r
\r
/* lpDependencies is doubly NULL terminated. */
\r
while (qsc->lpDependencies[*bufsize]) {
\r
@@
-577,6
+579,7
@@
int get_service_dependencies(const TCHAR *service_name, SC_HANDLE service_handle
if (! *buffer) {
\r
*bufsize = 0;
\r
print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("lpDependencies"), _T("get_service_dependencies()"));
\r
if (! *buffer) {
\r
*bufsize = 0;
\r
print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("lpDependencies"), _T("get_service_dependencies()"));
\r
+ HeapFree(GetProcessHeap(), 0, qsc);
\r
return 4;
\r
}
\r
\r
return 4;
\r
}
\r
\r
@@
-601,6
+604,12
@@
int get_service_dependencies(const TCHAR *service_name, SC_HANDLE service_handle
\r
HeapFree(GetProcessHeap(), 0, qsc);
\r
\r
\r
HeapFree(GetProcessHeap(), 0, qsc);
\r
\r
+ if (! *buffer[0]) {
\r
+ HeapFree(GetProcessHeap(), 0, *buffer);
\r
+ *buffer = 0;
\r
+ *bufsize = 0;
\r
+ }
\r
+
\r
return 0;
\r
}
\r
\r
return 0;
\r
}
\r
\r