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)