]> granicus.if.org Git - vim/commitdiff
patch 8.0.1411: reading invalid memory with CTRL-W : v8.0.1411
authorBram Moolenaar <Bram@vim.org>
Tue, 19 Dec 2017 11:27:23 +0000 (12:27 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 19 Dec 2017 11:27:23 +0000 (12:27 +0100)
Problem:    Reading invalid memory with CTRL-W :.
Solution:   Correct the command characters. (closes #2469)

src/normal.c
src/ops.c
src/testdir/test_window_cmd.vim
src/version.c

index 76eb18a21f8d9bf6253e4a9fafd420e064d33663..a8e65ffd629643d9f7ad59220c0cad80fcf26543 100644 (file)
@@ -7850,8 +7850,12 @@ n_start_visual_mode(int c)
 nv_window(cmdarg_T *cap)
 {
     if (cap->nchar == ':')
+    {
        /* "CTRL-W :" is the same as typing ":"; useful in a terminal window */
+       cap->cmdchar = ':';
+       cap->nchar = NUL;
        nv_colon(cap);
+    }
     else if (!checkclearop(cap->oap))
        do_window(cap->nchar, cap->count0, NUL); /* everything is in window.c */
 }
index cfa0bb367ec25b99a1d72e50ee292d3f72776113..83c36bda67e2ab69fc6f37d115527f7071da0dcd 100644 (file)
--- a/src/ops.c
+++ b/src/ops.c
@@ -183,8 +183,15 @@ get_op_type(int char1, int char2)
     if (char1 == 'g' && char2 == Ctrl_X)       /* subtract */
        return OP_NR_SUB;
     for (i = 0; ; ++i)
+    {
        if (opchars[i][0] == char1 && opchars[i][1] == char2)
            break;
+       if (i == (int)(sizeof(opchars) / sizeof(char [3]) - 1))
+       {
+           internal_error("get_op_type()");
+           break;
+       }
+    }
     return i;
 }
 
index 067f09cbc3007af1189fdb0b3cf7058dc3ac69aa..925cfcc484cea72fff7cd160495160332b6270ab 100644 (file)
@@ -467,4 +467,9 @@ func Test_window_contents()
   call test_garbagecollect_now()
 endfunc
 
+func Test_window_colon_command()
+  " This was reading invalid memory.
+  exe "norm! v\<C-W>:\<C-U>echo v:version"
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index cf53357a711dea400851ffc4144a09e3af9bda7a..ec17e4e67256186ebeea853e7f1cc483fb0da596 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1411,
 /**/
     1410,
 /**/