aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2010-03-14 23:31:23 +0000
committerNicholas Marriott <nicm@openbsd.org>2010-03-14 23:31:23 +0000
commit48dd72005e879336ea2439fb3422296be664cc76 (patch)
treeab5030e190b2fc36ad256debe4bc2621261d2b22
parent7bc3f5dd8ac2d867df39225a4e2dda51b725c390 (diff)
downloadrtmux-48dd72005e879336ea2439fb3422296be664cc76.tar.gz
rtmux-48dd72005e879336ea2439fb3422296be664cc76.tar.bz2
rtmux-48dd72005e879336ea2439fb3422296be664cc76.zip
Fix a use-after-free when cancelling copy mode, or trying to repeat cancel.
ok kettenis
-rw-r--r--window-copy.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/window-copy.c b/window-copy.c
index 17fc792b..c27b1821 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -256,9 +256,8 @@ window_copy_key(struct window_pane *wp, struct client *c, int key)
cmd = mode_key_lookup(&data->mdata, key);
switch (cmd) {
case MODEKEYCOPY_CANCEL:
- for (; np != 0; np--)
- window_pane_reset_mode(wp);
- break;
+ window_pane_reset_mode(wp);
+ return;
case MODEKEYCOPY_LEFT:
for (; np != 0; np--)
window_copy_cursor_left(wp);
@@ -366,6 +365,7 @@ window_copy_key(struct window_pane *wp, struct client *c, int key)
if (c != NULL && c->session != NULL) {
window_copy_copy_selection(wp, c);
window_pane_reset_mode(wp);
+ return;
}
break;
case MODEKEYCOPY_STARTOFLINE: