summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-02-17 20:17:02 +0100
committerBram Moolenaar <Bram@vim.org>2019-02-17 20:17:02 +0100
commita5483448cba6997517003a22a8029f0de1007d0e (patch)
tree77599292108fbba2fd93b46113fe8259e816efd0
parentc85c8fcb9fad565da78e01248c12f662f6bc04c8 (diff)
downloadvim-git-a5483448cba6997517003a22a8029f0de1007d0e.tar.gz
patch 8.1.0945: internal error when using pattern with NL in the rangev8.1.0945
Problem: Internal error when using pattern with NL in the range. Solution: Use an actual newline for the range. (closes #3989) Also fix error message. (Dominique Pelle)
-rw-r--r--src/regexp_nfa.c5
-rw-r--r--src/testdir/test_regexp_latin.vim8
-rw-r--r--src/version.c2
3 files changed, 13 insertions, 2 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index b83e309f7..9633791bc 100644
--- 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'
diff --git a/src/testdir/test_regexp_latin.vim b/src/testdir/test_regexp_latin.vim
index d30312a11..d603acdbc 100644
--- 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
diff --git a/src/version.c b/src/version.c
index b3244c168..0d44663a2 100644
--- 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,