neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 0de85e322a83282ad63fb07014a8530bbe05c6e3
parent 11b369925287a7706e8d6cab759263ef9192c5f3
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Thu, 15 Jan 2026 13:56:05 +0800

vim-patch:9.1.0701: crash with NFA regex engine when searching for composing chars

Problem:  crash with NFA regex engine when searching for composing chars
          (SuyueGuo)
Solution: When there is no composing character, break out of the loop
          and check that out1 state is not null

fixes: vim/vim#15583

https://github.com/vim/vim/commit/c3a02d78bd7a4622e85af348b24fb1388d160de1

Test uses DBCS 'encoding', which is N/A.

Co-authored-by: Christian Brabandt <cb@256bit.org>

Diffstat:
Msrc/nvim/regexp.c | 3++-
Atest/old/testdir/crash/nullptr_regexp_nfa | 0
Mtest/old/testdir/test_crash.vim | 5+++++
3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c @@ -14799,7 +14799,8 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm result = FAIL; } - if (t->state->out->out1->c == NFA_END_COMPOSING) { + if (t->state->out->out1 != NULL + && t->state->out->out1->c == NFA_END_COMPOSING) { end = t->state->out->out1; ADD_STATE_IF_MATCH(end); } diff --git a/test/old/testdir/crash/nullptr_regexp_nfa b/test/old/testdir/crash/nullptr_regexp_nfa Binary files differ. diff --git a/test/old/testdir/test_crash.vim b/test/old/testdir/test_crash.vim @@ -232,6 +232,11 @@ func Test_crash1_3() call term_sendkeys(buf, args) call TermWait(buf, 50) + let file = 'crash/nullptr_regexp_nfa' + let cmn_args = "%s -u NONE -i NONE -n -X -m -n -e -s -S %s -c ':qa!'" + let args = printf(cmn_args, vim, file) + call term_sendkeys(buf, args) + call TermWait(buf, 50) " clean up exe buf .. "bw!"