changeset 15876:0c49755f460e v8.1.0945

patch 8.1.0945: internal error when using pattern with NL in the range commit https://github.com/vim/vim/commit/a5483448cba6997517003a22a8029f0de1007d0e Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 17 20:17:02 2019 +0100 patch 8.1.0945: internal error when using pattern with NL in the range Problem: Internal error when using pattern with NL in the range. Solution: Use an actual newline for the range. (closes https://github.com/vim/vim/issues/3989) Also fix error message. (Dominique Pelle)
author Bram Moolenaar <Bram@vim.org>
date Sun, 17 Feb 2019 20:30:06 +0100
parents 83e98f8ca667
children 904e9bd83419
files src/regexp_nfa.c src/testdir/test_regexp_latin.vim src/version.c
diffstat 3 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -245,7 +245,7 @@ static int nfa_classcodes[] = {
 
 static char_u e_nul_found[] = N_("E865: (NFA) Regexp end encountered prematurely");
 static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
-static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
+static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %d");
 
 // Variables only used in nfa_regcomp() and descendants.
 static int nfa_re_flags; // re_flags passed to nfa_regcomp()
@@ -1785,7 +1785,8 @@ collection:
 			MB_PTR_ADV(regparse);
 
 			if (*regparse == 'n')
-			    startc = reg_string ? NL : NFA_NEWL;
+			    startc = (reg_string || emit_range
+					|| regparse[1] == '-') ? NL : NFA_NEWL;
 			else
 			    if  (*regparse == 'd'
 				    || *regparse == 'o'
--- a/src/testdir/test_regexp_latin.vim
+++ b/src/testdir/test_regexp_latin.vim
@@ -122,3 +122,11 @@ func Test_rex_init()
   bwipe!
   set re=0
 endfunc
+
+func Test_range_with_newline()
+  new
+  call setline(1, "a")
+  call assert_equal(0, search("[ -*\\n- ]"))
+  call assert_equal(0, search("[ -*\\t-\\n]"))
+  bwipe!
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -780,6 +780,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    945,
+/**/
     944,
 /**/
     943,