# HG changeset patch # User Bram Moolenaar # Date 1625681703 -7200 # Node ID b2a6a71a11e84acb78fd8d21445fdb46c6b58ec8 # Parent ba239bb4a9dffcbc5f4abd4df5d1d0b1cae384a6 patch 8.2.3116: Vim9: crash when debugging a function with line continuation Commit: https://github.com/vim/vim/commit/303215d60cece0462f040035502b5bc95373bd6e Author: Bram Moolenaar Date: Wed Jul 7 20:10:43 2021 +0200 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 https://github.com/vim/vim/issues/8521) diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim --- 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 --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3116, +/**/ 3115, /**/ 3114, diff --git a/src/vim9execute.c b/src/vim9execute.c --- 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)