From 5a6ed33a3f09a18b0fefc1803977e3a1c3725cdb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Mon, 16 Feb 2009 19:29:17 +0000 Subject: [PATCH] Don't leak string arguments and options. --- cmd-string.c | 8 +++++++- server.c | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cmd-string.c b/cmd-string.c index abe9222e..089f303e 100644 --- a/cmd-string.c +++ b/cmd-string.c @@ -1,4 +1,4 @@ -/* $Id: cmd-string.c,v 1.12 2009-02-08 16:38:19 nicm Exp $ */ +/* $Id: cmd-string.c,v 1.13 2009-02-16 19:29:17 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -94,6 +94,7 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause) buf = xrealloc(buf, 1, len + strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1); len += strlen(t); + xfree(t); have_arg = 1; break; @@ -103,6 +104,7 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause) buf = xrealloc(buf, 1, len + strlen(t) + 1); strlcpy(buf + len, t, strlen(t) + 1); len += strlen(t); + xfree(t); have_arg = 1; break; @@ -145,6 +147,10 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause) if (*cmdlist == NULL) goto out; + do + xfree(argv[argc - 1]); + while (--argc > 0); + rval = 0; goto out; default: diff --git a/server.c b/server.c index e284389a..f6a23eb7 100644 --- a/server.c +++ b/server.c @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.122 2009-02-16 18:51:39 nicm Exp $ */ +/* $Id: server.c,v 1.123 2009-02-16 19:29:17 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -336,6 +336,11 @@ server_main(const char *srv_path, int srv_fd) close(srv_fd); unlink(srv_path); + options_free(&global_options); + options_free(&global_window_options); + if (server_password != NULL) + xfree(server_password); + return (0); }