Memory leaks, from David CARLIER.
authornicm <nicm@openbsd.org>
Sat, 22 Apr 2017 06:13:30 +0000 (06:13 +0000)
committernicm <nicm@openbsd.org>
Sat, 22 Apr 2017 06:13:30 +0000 (06:13 +0000)
usr.bin/tmux/cmd-load-buffer.c
usr.bin/tmux/cmd-save-buffer.c
usr.bin/tmux/cmd-set-option.c
usr.bin/tmux/options.c
usr.bin/tmux/server.c

index 969f779..eb388c7 100644 (file)
@@ -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);
 }
 
index 419f1ae..7072d46 100644 (file)
@@ -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);
        }
 
index c544e26..02f8b2a 100644 (file)
@@ -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
index b433c2e..42722f9 100644 (file)
@@ -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;
index 302ce92..d61e593 100644 (file)
@@ -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);