From c744964cd96554415a8a707c47eef3e0db0a60af Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Mon, 25 Jan 2010 17:12:44 +0000 Subject: [PATCH] Sync OpenBSD patchset 614: Don't leak if arguments appear multiple times, from Tiago Cunha. --- cmd-bind-key.c | 5 +++-- cmd-switch-client.c | 8 +++++--- cmd-unbind-key.c | 5 +++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cmd-bind-key.c b/cmd-bind-key.c index 6f292629..3bb613eb 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -1,4 +1,4 @@ -/* $Id: cmd-bind-key.c,v 1.27 2009-12-04 22:14:47 tcunha Exp $ */ +/* $Id: cmd-bind-key.c,v 1.28 2010-01-25 17:12:44 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -79,7 +79,8 @@ cmd_bind_key_parse(struct cmd *self, int argc, char **argv, char **cause) data->can_repeat = 1; break; case 't': - data->tablename = xstrdup(optarg); + if (data->tablename == NULL) + data->tablename = xstrdup(optarg); break; default: goto usage; diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 4edaccf6..09addc30 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -1,4 +1,4 @@ -/* $Id: cmd-switch-client.c,v 1.18 2009-11-14 17:56:39 tcunha Exp $ */ +/* $Id: cmd-switch-client.c,v 1.19 2010-01-25 17:12:44 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -61,10 +61,12 @@ cmd_switch_client_parse(struct cmd *self, int argc, char **argv, char **cause) while ((opt = getopt(argc, argv, "c:t:")) != -1) { switch (opt) { case 'c': - data->name = xstrdup(optarg); + if (data->name == NULL) + data->name = xstrdup(optarg); break; case 't': - data->target = xstrdup(optarg); + if (data->target == NULL) + data->target = xstrdup(optarg); break; default: goto usage; diff --git a/cmd-unbind-key.c b/cmd-unbind-key.c index b1618470..f420bd74 100644 --- a/cmd-unbind-key.c +++ b/cmd-unbind-key.c @@ -1,4 +1,4 @@ -/* $Id: cmd-unbind-key.c,v 1.21 2009-11-14 17:56:39 tcunha Exp $ */ +/* $Id: cmd-unbind-key.c,v 1.22 2010-01-25 17:12:44 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -67,7 +67,8 @@ cmd_unbind_key_parse(struct cmd *self, int argc, char **argv, char **cause) no_prefix = 1; break; case 't': - data->tablename = xstrdup(optarg); + if (data->tablename == NULL) + data->tablename = xstrdup(optarg); break; default: goto usage;