diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-04-05 14:00:32 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-04-05 14:00:32 +0100 |
commit | 72bb10df1fb3eb69bc91f5babfb8881ce098cba1 (patch) | |
tree | e2f392f6e2c6567e6686027b70021ed6a862d723 | |
parent | 0f68e6c07aaf62c034a242f183b93c1bb44e7f93 (diff) | |
download | vim-git-72bb10df1fb3eb69bc91f5babfb8881ce098cba1.tar.gz |
patch 8.2.4693: new regexp does not accept pattern "\%>0v"v8.2.4693
Problem: new regexp does not accept pattern "\%>0v".
Solution: Do accept digit zero.
-rw-r--r-- | src/regexp_bt.c | 5 | ||||
-rw-r--r-- | src/regexp_nfa.c | 4 | ||||
-rw-r--r-- | src/testdir/test_regexp_latin.vim | 15 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/src/regexp_bt.c b/src/regexp_bt.c index 0b3487fa0..18bad8054 100644 --- a/src/regexp_bt.c +++ b/src/regexp_bt.c @@ -1617,6 +1617,7 @@ regatom(int *flagp) long_u n = 0; int cmp; int cur = FALSE; + int got_digit = FALSE; cmp = c; if (cmp == '<' || cmp == '>') @@ -1628,6 +1629,7 @@ regatom(int *flagp) } while (VIM_ISDIGIT(c)) { + got_digit = TRUE; n = n * 10 + (c - '0'); c = getchr(); } @@ -1645,7 +1647,8 @@ regatom(int *flagp) } break; } - else if (c == 'l' || c == 'c' || c == 'v') + else if ((c == 'l' || c == 'c' || c == 'v') + && (cur || got_digit)) { if (cur && n) { diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index d658a6bd7..2c79a49e4 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1640,6 +1640,7 @@ nfa_regatom(void) long_u n = 0; int cmp = c; int cur = FALSE; + int got_digit = FALSE; if (c == '<' || c == '>') c = getchr(); @@ -1668,12 +1669,13 @@ nfa_regatom(void) } n = tmp; c = getchr(); + got_digit = TRUE; } if (c == 'l' || c == 'c' || c == 'v') { long_u limit = INT_MAX; - if (!cur && n == 0) + if (!cur && !got_digit) { semsg(_(e_nfa_regexp_missing_value_in_chr), no_Magic(c)); diff --git a/src/testdir/test_regexp_latin.vim b/src/testdir/test_regexp_latin.vim index dfb367b5f..0b288f69f 100644 --- a/src/testdir/test_regexp_latin.vim +++ b/src/testdir/test_regexp_latin.vim @@ -91,16 +91,29 @@ func Test_multi_failure() set re=0 endfunc -func Test_column_failure() +func Test_column_success_failure() + new + call setline(1, 'xbar') + set re=1 + %s/\%>0v./A/ + call assert_equal('Abar', getline(1)) call assert_fails('/\%v', 'E71:') + call assert_fails('/\%>v', 'E71:') call assert_fails('/\%c', 'E71:') + call assert_fails('/\%<c', 'E71:') call assert_fails('/\%l', 'E71:') set re=2 + %s/\%>0v./B/ + call assert_equal('Bbar', getline(1)) call assert_fails('/\%v', 'E1273:') + call assert_fails('/\%>v', 'E1273:') call assert_fails('/\%c', 'E1273:') + call assert_fails('/\%<c', 'E1273:') call assert_fails('/\%l', 'E1273:') + set re=0 + bwipe! endfunc func Test_recursive_addstate() diff --git a/src/version.c b/src/version.c index 4451f7d91..203b9472b 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4693, +/**/ 4692, /**/ 4691, |