summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2020-10-21 19:05:39 +0200
committerCarson Fleming <cflems@cflems.net>2020-10-21 19:05:39 +0200
commitcea9c9201069ff608bb53830773609584f15a28c (patch)
tree6dd6f6f3c1d1a1b52fdc89dc00f4a09333a3a587
parentdf387aae5c3d2e77b74559fb48f2a43c183e9bee (diff)
downloaddaemonize-cea9c9201069ff608bb53830773609584f15a28c.tar.gz
Copied the command buffer to the stack to resolve memory leakHEADmaster
-rw-r--r--daemonize.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/daemonize.c b/daemonize.c
index 7b9daac..001f260 100644
--- a/daemonize.c
+++ b/daemonize.c
@@ -89,15 +89,18 @@ int main (int argc, char** argv) {
int arglen = strlen(argv[optind]);
while (cmdlen+arglen+1 > buff_size) {
buff_size *= 2;
- buffer = realloc(buffer, buff_size);
- if (buffer == NULL) q("[daemonize] Out of memory parsing arguments.");
}
+ buffer = realloc(buffer, buff_size);
+ if (buffer == NULL) q("[daemonize] Out of memory parsing arguments.");
strncpy(&buffer[cmdlen], argv[optind++], arglen);
cmdlen += arglen+1;
buffer[cmdlen-1] = ' ';
}
+
buffer[cmdlen-1] = 0;
-
+ char cmd[cmdlen];
+ memcpy(cmd, buffer, cmdlen);
+ free(buffer);
if (cmdlen < 1) qtoofewargs();
// Set up logs as appropriate
@@ -125,6 +128,6 @@ int main (int argc, char** argv) {
daemon(options.nochdir, options.noclose | logs);
- char* args[] = {"/bin/sh", "-c", buffer, NULL};
+ char* args[] = {"/bin/sh", "-c", cmd, NULL};
execv(args[0], args);
}