summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-07-01 11:59:47 +0200
committerBram Moolenaar <Bram@vim.org>2016-07-01 11:59:47 +0200
commit1d90a5a5af84250e226f8a9121e771f7b72aa894 (patch)
treea389742a425e6f06966959bd744c96c3a4f296a3
parent6747fabc7348bf5f41ccfe851e2be3e900ec8ee0 (diff)
downloadvim-git-1d90a5a5af84250e226f8a9121e771f7b72aa894.tar.gz
patch 7.4.1968v7.4.1968
Problem: Invalid memory access with "\<C-">. Solution: Do not recognize this as a special character. (Dominique Pelle)
-rw-r--r--src/misc2.c6
-rw-r--r--src/testdir/test_expr.vim5
-rw-r--r--src/version.c2
3 files changed, 11 insertions, 2 deletions
diff --git a/src/misc2.c b/src/misc2.c
index 1018e4b06..397799ad8 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -2741,8 +2741,10 @@ find_special_key(
else
#endif
l = 1;
- if (bp[l + 1] == '>')
- bp += l; /* anything accepted, like <C-?> */
+ /* Anything accepted, like <C-?>, except <C-">, because the "
+ * ends the string. */
+ if (bp[l] != '"' && bp[l + 1] == '>')
+ bp += l;
}
}
if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim
index 7d7870e53..f44e21660 100644
--- a/src/testdir/test_expr.vim
+++ b/src/testdir/test_expr.vim
@@ -101,3 +101,8 @@ endfunc
func Test_set_reg_null_list()
call setreg('x', test_null_list())
endfunc
+
+func Test_special_char()
+ " The failure is only visible using valgrind.
+ call assert_fails('echo "\<C-">')
+endfunc
diff --git a/src/version.c b/src/version.c
index 89dd5d706..2a3ded763 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1968,
+/**/
1967,
/**/
1966,