vim-patch:9.1.0182: Can define function with invalid name inside 'formatexpr' (#27883)

Problem:  Can define function with invalid name inside 'formatexpr'.
Solution: Use goto instead of checking for did_emsg later.
          (zeertzjq)

closes: vim/vim#14209

6a04bf5ee5
This commit is contained in:
zeertzjq 2024-03-16 17:26:14 +08:00 committed by GitHub
parent c0daea3afd
commit ee89ba1d75
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 0 deletions

View File

@ -2309,6 +2309,7 @@ void ex_function(exarg_T *eap)
: eval_isnamec(name_base[i])); i++) {}
if (name_base[i] != NUL) {
emsg_funcname(e_invarg2, arg);
goto ret_free;
}
}
// Disallow using the g: dict.

View File

@ -891,4 +891,23 @@ func Test_multidefer_with_exception()
delfunc Foo
endfunc
func Test_func_curly_brace_invalid_name()
func Fail()
func Foo{'()'}bar()
endfunc
endfunc
call assert_fails('call Fail()', 'E475: Invalid argument: Foo()bar')
silent! call Fail()
call assert_equal([], getcompletion('Foo', 'function'))
set formatexpr=Fail()
normal! gqq
call assert_equal([], getcompletion('Foo', 'function'))
set formatexpr&
delfunc Fail
endfunc
" vim: shiftwidth=2 sts=2 expandtab