summaryrefslogtreecommitdiff
path: root/usr.bin/tmux
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2017-04-22 06:13:31 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2017-04-22 06:13:31 +0000
commit7dacec96629ca9cf12bfbb31ffcec3d881b74045 (patch)
tree43559f016d711a5f94b7c194c63275f4744ed548 /usr.bin/tmux
parentdad77f0ade2df22ab8afa6eddc7ff3d6f9d53883 (diff)
Memory leaks, from David CARLIER.
Diffstat (limited to 'usr.bin/tmux')
-rw-r--r--usr.bin/tmux/cmd-load-buffer.c3
-rw-r--r--usr.bin/tmux/cmd-save-buffer.c3
-rw-r--r--usr.bin/tmux/cmd-set-option.c30
-rw-r--r--usr.bin/tmux/options.c4
-rw-r--r--usr.bin/tmux/server.c10
5 files changed, 31 insertions, 19 deletions
diff --git a/usr.bin/tmux/cmd-load-buffer.c b/usr.bin/tmux/cmd-load-buffer.c
index 969f779889b..eb388c71e27 100644
--- a/usr.bin/tmux/cmd-load-buffer.c
+++ b/usr.bin/tmux/cmd-load-buffer.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-load-buffer.c,v 1.49 2017/02/14 18:13:05 nicm Exp $ */
+/* $OpenBSD: cmd-load-buffer.c,v 1.50 2017/04/22 06:13:30 nicm Exp $ */
/*
* Copyright (c) 2009 Tiago Cunha <me@tiagocunha.org>
@@ -127,6 +127,7 @@ error:
free(pdata);
if (f != NULL)
fclose(f);
+ free(file);
return (CMD_RETURN_ERROR);
}
diff --git a/usr.bin/tmux/cmd-save-buffer.c b/usr.bin/tmux/cmd-save-buffer.c
index 419f1ae29f6..7072d4698ad 100644
--- a/usr.bin/tmux/cmd-save-buffer.c
+++ b/usr.bin/tmux/cmd-save-buffer.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-save-buffer.c,v 1.42 2017/02/14 18:13:05 nicm Exp $ */
+/* $OpenBSD: cmd-save-buffer.c,v 1.43 2017/04/22 06:13:30 nicm Exp $ */
/*
* Copyright (c) 2009 Tiago Cunha <me@tiagocunha.org>
@@ -112,6 +112,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item)
if (fwrite(bufdata, 1, bufsize, f) != bufsize) {
cmdq_error(item, "%s: write error", file);
fclose(f);
+ free(file);
return (CMD_RETURN_ERROR);
}
diff --git a/usr.bin/tmux/cmd-set-option.c b/usr.bin/tmux/cmd-set-option.c
index c544e26a6d9..02f8b2a6860 100644
--- a/usr.bin/tmux/cmd-set-option.c
+++ b/usr.bin/tmux/cmd-set-option.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-set-option.c,v 1.112 2017/02/16 10:53:25 nicm Exp $ */
+/* $OpenBSD: cmd-set-option.c,v 1.113 2017/04/22 06:13:30 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -77,7 +77,8 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
enum options_table_scope scope;
struct options *oo;
struct options_entry *parent, *o;
- const char *name, *value, *target;
+ char *name;
+ const char *value, *target;
int window, idx, already, error, ambiguous;
char *cause;
@@ -121,7 +122,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
return (CMD_RETURN_NORMAL);
cmdq_error(item, "%s", cause);
free(cause);
- return (CMD_RETURN_ERROR);
+ goto fail;
}
/* Which table should this option go into? */
@@ -136,7 +137,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
cmdq_error(item, "no such session: %s", target);
else
cmdq_error(item, "no current session");
- return (CMD_RETURN_ERROR);
+ goto fail;
} else
oo = s->options;
} else if (scope == OPTIONS_TABLE_WINDOW) {
@@ -148,7 +149,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
cmdq_error(item, "no such window: %s", target);
else
cmdq_error(item, "no current window");
- return (CMD_RETURN_ERROR);
+ goto fail;
} else
oo = wl->window->options;
}
@@ -159,7 +160,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
if (idx != -1) {
if (*name == '@' || options_array_size(parent, NULL) == -1) {
cmdq_error(item, "not an array: %s", args->argv[0]);
- return (CMD_RETURN_ERROR);
+ goto fail;
}
}
@@ -177,14 +178,14 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
if (args_has(args, 'q'))
return (CMD_RETURN_NORMAL);
cmdq_error(item, "already set: %s", args->argv[0]);
- return (CMD_RETURN_ERROR);
+ goto fail;
}
}
/* Change the option. */
if (args_has(args, 'u')) {
if (o == NULL)
- return (CMD_RETURN_NORMAL);
+ goto fail;
if (idx == -1) {
if (oo == global_options ||
oo == global_s_options ||
@@ -197,17 +198,17 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
} else if (*name == '@') {
if (value == NULL) {
cmdq_error(item, "empty value");
- return (CMD_RETURN_ERROR);
+ goto fail;
}
options_set_string(oo, name, append, "%s", value);
} else if (idx == -1 && options_array_size(parent, NULL) == -1) {
error = cmd_set_option_set(self, item, oo, parent, value);
if (error != 0)
- return (CMD_RETURN_ERROR);
+ goto fail;
} else {
if (value == NULL) {
cmdq_error(item, "empty value");
- return (CMD_RETURN_ERROR);
+ goto fail;
}
if (o == NULL)
o = options_empty(oo, options_table_entry(parent));
@@ -217,7 +218,7 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
options_array_assign(o, value);
} else if (options_array_set(o, idx, value, append) != 0) {
cmdq_error(item, "invalid index: %s", args->argv[0]);
- return (CMD_RETURN_ERROR);
+ goto fail;
}
}
@@ -261,7 +262,12 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item)
server_redraw_client(c);
}
+ free(name);
return (CMD_RETURN_NORMAL);
+
+fail:
+ free(name);
+ return (CMD_RETURN_ERROR);
}
static int
diff --git a/usr.bin/tmux/options.c b/usr.bin/tmux/options.c
index b433c2ef50b..42722f972d0 100644
--- a/usr.bin/tmux/options.c
+++ b/usr.bin/tmux/options.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: options.c,v 1.33 2017/03/08 14:43:40 nicm Exp $ */
+/* $OpenBSD: options.c,v 1.34 2017/04/22 06:13:30 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -433,7 +433,7 @@ options_match(const char *s, int *idx, int* ambiguous)
if (*name == '@') {
*ambiguous = 0;
- return (xstrdup(name));
+ return (name);
}
found = NULL;
diff --git a/usr.bin/tmux/server.c b/usr.bin/tmux/server.c
index 302ce92833f..d61e593a5c1 100644
--- a/usr.bin/tmux/server.c
+++ b/usr.bin/tmux/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.169 2017/04/21 20:26:34 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.170 2017/04/22 06:13:30 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -119,12 +119,16 @@ server_create_socket(void)
return (-1);
mask = umask(S_IXUSR|S_IXGRP|S_IRWXO);
- if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1)
+ if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1) {
+ close(fd);
return (-1);
+ }
umask(mask);
- if (listen(fd, 128) == -1)
+ if (listen(fd, 128) == -1) {
+ close(fd);
return (-1);
+ }
setblocking(fd, 0);
return (fd);