Mercurial > vim
changeset 25159:b2a6a71a11e8 v8.2.3116
patch 8.2.3116: Vim9: crash when debugging a function with line continuation
Commit: https://github.com/vim/vim/commit/303215d60cece0462f040035502b5bc95373bd6e
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 07 Jul 2021 20:15:03 +0200 |
parents | ba239bb4a9df |
children | 60bcd63e006d |
files | src/testdir/test_debugger.vim src/version.c src/vim9execute.c |
diffstat | 3 files changed, 20 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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')
--- 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,
--- 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)