diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2020-12-09 18:53:55 +0000 |
---|---|---|
committer | Sean Dewar <seandewar@users.noreply.github.com> | 2020-12-09 19:02:57 +0000 |
commit | b8a0304bb90cf1725cff78cd59521c417f36e5f4 (patch) | |
tree | 04dc790409943eb52bb1c59371925e6ca186cf35 /src/nvim/regexp.c | |
parent | bfed67e00ecdf71e0c7d17b1fd802f223b42c800 (diff) | |
download | rneovim-b8a0304bb90cf1725cff78cd59521c417f36e5f4.tar.gz rneovim-b8a0304bb90cf1725cff78cd59521c417f36e5f4.tar.bz2 rneovim-b8a0304bb90cf1725cff78cd59521c417f36e5f4.zip |
vim-patch:8.2.2121: internal error when using \ze before \zs in a pattern
Problem: Internal error when using \ze before \zs in a pattern.
Solution: Check the end is never before the start. (closes vim/vim#7442)
https://github.com/vim/vim/commit/a7a691cc142439e266f4ceb1f208bb952b57aa71
Diffstat (limited to 'src/nvim/regexp.c')
-rw-r--r-- | src/nvim/regexp.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index 1c88bd4ba4..2878e73573 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -3605,6 +3605,22 @@ theend: if (backpos.ga_maxlen > BACKPOS_INITIAL) ga_clear(&backpos); + // Make sure the end is never before the start. Can happen when \zs and + // \ze are used. + if (REG_MULTI) { + const lpos_T *const start = &rex.reg_mmatch->startpos[0]; + const lpos_T *const end = &rex.reg_mmatch->endpos[0]; + + if (end->lnum < start->lnum + || (end->lnum == start->lnum && end->col < start->col)) { + rex.reg_mmatch->endpos[0] = rex.reg_mmatch->startpos[0]; + } + } else { + if (rex.reg_match->endp[0] < rex.reg_match->startp[0]) { + rex.reg_match->endp[0] = rex.reg_match->startp[0]; + } + } + return retval; } |