commit 08121ef69f47f8ad8f8903a732920412e24d30c1
parent d13222649a2145272f14675d9bbf64bb72c43f64
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sun, 16 Apr 2023 08:55:42 +0800
vim-patch:8.2.2848: crash whn calling partial
Problem: Crash whn calling partial.
Solution: Check for NULL pointer. (Dominique Pellé, closes vim/vim#8202)
https://github.com/vim/vim/commit/fe8ebdbe5c4e116311c0c0d5937b89ded5c92d01
Co-authored-by: Dominique Pelle <dominique.pelle@gmail.com>
Diffstat:
4 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
@@ -4175,11 +4175,13 @@ int eval_interp_string(char **arg, typval_T *rettv, bool evaluate)
char *partial_name(partial_T *pt)
FUNC_ATTR_PURE
{
- if (pt->pt_name != NULL) {
- return pt->pt_name;
- }
- if (pt->pt_func != NULL) {
- return pt->pt_func->uf_name;
+ if (pt != NULL) {
+ if (pt->pt_name != NULL) {
+ return pt->pt_name;
+ }
+ if (pt->pt_func != NULL) {
+ return pt->pt_func->uf_name;
+ }
}
return "";
}
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
@@ -565,8 +565,8 @@ static void f_call(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
func = (char *)tv_get_string(&argvars[0]);
}
- if (*func == NUL) {
- return; // type error or empty name
+ if (func == NULL || *func == NUL) {
+ return; // type error, empty name or null function
}
dict_T *selfdict = NULL;
@@ -1136,7 +1136,7 @@ static void f_ctxsize(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
}
/// Set the cursor position.
-/// If 'charcol' is true, then use the column number as a character offset.
+/// If "charcol" is true, then use the column number as a character offset.
/// Otherwise use the column number as a byte offset.
static void set_cursorpos(typval_T *argvars, typval_T *rettv, bool charcol)
{
diff --git a/test/old/testdir/test_functions.vim b/test/old/testdir/test_functions.vim
@@ -2009,6 +2009,12 @@ func Test_call()
eval mydict.len->call([], mydict)->assert_equal(4)
call assert_fails("call call('Mylen', [], 0)", 'E715:')
call assert_fails('call foo', 'E107:')
+
+ " This once caused a crash.
+ " Nvim doesn't have null functions
+ " call call(test_null_function(), [])
+ " Nvim doesn't have null partials
+ " call call(test_null_partial(), [])
endfunc
func Test_char2nr()
diff --git a/test/old/testdir/test_listdict.vim b/test/old/testdir/test_listdict.vim
@@ -751,6 +751,8 @@ func Test_reduce()
" should not crash
" Nvim doesn't have null functions
" call assert_fails('echo reduce([1], test_null_function())', 'E1132:')
+ " Nvim doesn't have null partials
+ " call assert_fails('echo reduce([1], test_null_partial())', 'E1132:')
endfunc
" splitting a string to a List using split()