diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-11-05 16:32:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-05 16:32:58 +0800 |
commit | 1bcddd5b53a0993789df7ec91fecea47dcfcccfa (patch) | |
tree | 774c6d91442f0035ac7e03729be79a53fcfc257d /src/nvim/regexp_bt.c | |
parent | 45a3e7f6694c66c3577a47c7ff1fb8bfcc2ab7be (diff) | |
parent | e33ffab1a776518dbf59ba5fe82453fa019569eb (diff) | |
download | rneovim-1bcddd5b53a0993789df7ec91fecea47dcfcccfa.tar.gz rneovim-1bcddd5b53a0993789df7ec91fecea47dcfcccfa.tar.bz2 rneovim-1bcddd5b53a0993789df7ec91fecea47dcfcccfa.zip |
Merge pull request #20943 from zeertzjq/vim-8.2.4688
vim-patch:8.2.{4688,4693,4978},9.0.0053: regexp fixes
Diffstat (limited to 'src/nvim/regexp_bt.c')
-rw-r--r-- | src/nvim/regexp_bt.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/nvim/regexp_bt.c b/src/nvim/regexp_bt.c index ac33fc0f13..6f63b38a90 100644 --- a/src/nvim/regexp_bt.c +++ b/src/nvim/regexp_bt.c @@ -1971,6 +1971,11 @@ static char_u *regatom(int *flagp) break; case '#': + if (regparse[0] == '=' && regparse[1] >= 48 && regparse[1] <= 50) { + // misplaced \%#=1 + semsg(_(e_atom_engine_must_be_at_start_of_pattern), regparse[1]); + return FAIL; + } ret = regnode(CURSOR); break; @@ -2091,6 +2096,7 @@ static char_u *regatom(int *flagp) uint32_t n = 0; int cmp; bool cur = false; + bool got_digit = false; cmp = c; if (cmp == '<' || cmp == '>') { @@ -2101,6 +2107,7 @@ static char_u *regatom(int *flagp) c = getchr(); } while (ascii_isdigit(c)) { + got_digit = true; n = n * 10 + (uint32_t)(c - '0'); c = getchr(); } @@ -2115,9 +2122,9 @@ static char_u *regatom(int *flagp) *regcode++ = (char_u)cmp; } break; - } else if (c == 'l' || c == 'c' || c == 'v') { + } else if ((c == 'l' || c == 'c' || c == 'v') && (cur || got_digit)) { if (cur && n) { - semsg(_(e_regexp_number_after_dot_pos_search), no_Magic(c)); + semsg(_(e_regexp_number_after_dot_pos_search_chr), no_Magic(c)); rc_did_emsg = true; return NULL; } |