summaryrefslogtreecommitdiffstats
path: root/paste.c
diff options
context:
space:
mode:
authornicm <nicm>2015-04-07 13:06:22 +0000
committernicm <nicm>2015-04-07 13:06:22 +0000
commit6920be311b276277ad7c38a96ccca4746b94bd95 (patch)
tree548a3c7fec74796d1736e47bf6b4944f94e4f816 /paste.c
parent3aa72b42b2a317b0ae531219d269f2a636d6482a (diff)
When replacing, don't free the old paste until after the new one's name
has been copied. Fixes a use-after-free in window-copy.c. Bug reported by J Raynor (who also provided a different fix).
Diffstat (limited to 'paste.c')
-rw-r--r--paste.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/paste.c b/paste.c
index de80115e..2ccc3cd2 100644
--- a/paste.c
+++ b/paste.c
@@ -247,9 +247,6 @@ paste_set(char *data, size_t size, const char *name, char **cause)
return (-1);
}
- pb = paste_get_name(name);
- if (pb != NULL)
- paste_free_name(name);
pb = xmalloc(sizeof *pb);
@@ -261,6 +258,9 @@ paste_set(char *data, size_t size, const char *name, char **cause)
pb->automatic = 0;
pb->order = paste_next_order++;
+ if (paste_get_name(name) != NULL)
+ paste_free_name(name);
+
RB_INSERT(paste_name_tree, &paste_by_name, pb);
RB_INSERT(paste_time_tree, &paste_by_time, pb);