summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2014-02-17 23:07:03 +0000
committernicm <nicm>2014-02-17 23:07:03 +0000
commit6daf06b1ad61f67e9f7780d787451b9b5f82dd43 (patch)
treeadcac8b7975434a335487147e09920c26593039e
parent69b7c496accc2a646e5e2dee7870bea1194a6641 (diff)
Fix memory leaks with paste_replace, based on changes from J Raynor.
-rw-r--r--cmd-load-buffer.c1
-rw-r--r--paste.c4
-rw-r--r--window-copy.c4
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);
diff --git a/paste.c b/paste.c
index 2e89a5ef..946935a3 100644
--- a/paste.c
+++ b/paste.c
@@ -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