From 303215d60cece0462f040035502b5bc95373bd6e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 7 Jul 2021 20:10:43 +0200 Subject: patch 8.2.3116: Vim9: crash when debugging a function with line continuation Problem: Vim9: crash when debugging a function with line continuation. Solution: Check for a NULL pointer. (closes #8521) --- src/testdir/test_debugger.vim | 13 +++++++++++++ src/version.c | 2 ++ src/vim9execute.c | 6 ++++-- 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim index 97e115bf3e..5b12c58778 100644 --- a/src/testdir/test_debugger.vim +++ b/src/testdir/test_debugger.vim @@ -1009,6 +1009,7 @@ func Test_debug_def_function() eval 1 enddef enddef + def g:FuncComment() # comment echo "first" @@ -1016,6 +1017,7 @@ func Test_debug_def_function() # comment echo "second" enddef + def g:FuncForLoop() eval 1 for i in [11, 22, 33] @@ -1023,6 +1025,11 @@ func Test_debug_def_function() endfor echo "done" enddef + + def g:FuncWithSplitLine() + eval 1 + | eval 2 + enddef END call writefile(file, 'Xtest.vim') @@ -1078,6 +1085,12 @@ func Test_debug_def_function() call RunDbgCmd(buf, 'next', ['function FuncForLoop', 'line 2: for i in [11, 22, 33]']) call RunDbgCmd(buf, 'echo i', ['22']) + call RunDbgCmd(buf, 'breakdel *') + call RunDbgCmd(buf, 'cont') + + call RunDbgCmd(buf, ':breakadd func FuncWithSplitLine') + call RunDbgCmd(buf, ':call FuncWithSplitLine()', ['function FuncWithSplitLine', 'line 1: eval 1 | eval 2']) + call RunDbgCmd(buf, 'cont') call StopVimInTerminal(buf) call delete('Xtest.vim') diff --git a/src/version.c b/src/version.c index e2f74e926c..1deb3e4826 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3116, /**/ 3115, /**/ diff --git a/src/vim9execute.c b/src/vim9execute.c index b194e6a2a2..87f3c424ea 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -1497,9 +1497,11 @@ handle_debug(isn_T *iptr, ectx_T *ectx) ga_init2(&ga, sizeof(char_u *), 10); for (lnum = iptr->isn_lnum; lnum < end_lnum; ++lnum) { - char_u *p = skipwhite( - ((char_u **)ufunc->uf_lines.ga_data)[lnum - 1]); + char_u *p = ((char_u **)ufunc->uf_lines.ga_data)[lnum - 1]; + if (p == NULL) + continue; // left over from continuation line + p = skipwhite(p); if (*p == '#') break; if (ga_grow(&ga, 1) == OK) -- cgit v1.2.3