diff options
author | nicm <nicm> | 2014-02-17 23:07:03 +0000 |
---|---|---|
committer | nicm <nicm> | 2014-02-17 23:07:03 +0000 |
commit | 6daf06b1ad61f67e9f7780d787451b9b5f82dd43 (patch) | |
tree | adcac8b7975434a335487147e09920c26593039e | |
parent | 69b7c496accc2a646e5e2dee7870bea1194a6641 (diff) |
Fix memory leaks with paste_replace, based on changes from J Raynor.
-rw-r--r-- | cmd-load-buffer.c | 1 | ||||
-rw-r--r-- | paste.c | 4 | ||||
-rw-r--r-- | window-copy.c | 4 |
3 files changed, 6 insertions, 3 deletions
diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index eb6e0d0c..636f0fcd 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -169,6 +169,7 @@ cmd_load_buffer_callback(struct client *c, int closed, void *data) /* No context so can't use server_client_msg_error. */ evbuffer_add_printf(c->stderr_data, "no buffer %d\n", *buffer); server_push_stderr(c); + free(pdata); } free(data); @@ -131,8 +131,10 @@ paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size) { struct paste_buffer *pb; - if (size == 0) + if (size == 0) { + free(data); return (0); + } if (idx >= ARRAY_LENGTH(ps)) return (-1); diff --git a/window-copy.c b/window-copy.c index df4ca55a..76c9c3ce 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1455,8 +1455,8 @@ window_copy_copy_buffer(struct window_pane *wp, int idx, void *buf, size_t len) if (idx == -1) { limit = options_get_number(&global_options, "buffer-limit"); paste_add(&global_buffers, buf, len, limit); - } else - paste_replace(&global_buffers, idx, buf, len); + } else if (paste_replace(&global_buffers, idx, buf, len) != 0) + free(buf); } void |