changeset 21787:837e6a429950 v8.2.1443

patch 8.2.1443: Vim9: crash when interrupting a nested :def function Commit: https://github.com/vim/vim/commit/cdd70f09a5340c3d7ae873f1aaaf9847f27410cc Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 13 21:40:18 2020 +0200 patch 8.2.1443: Vim9: crash when interrupting a nested :def function Problem: Vim9: crash when interrupting a nested :def function. Solution: Push a dummy return value onto the stack. (closes https://github.com/vim/vim/issues/6701)
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Aug 2020 21:45:05 +0200
parents 97b64b16fd66
children acd6c7f8b633
files src/version.c src/vim9execute.c
diffstat 2 files changed, 11 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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 */
 /**/
+    1443,
+/**/
     1442,
 /**/
     1441,
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -915,16 +915,17 @@ call_def_function(
 	    }
 	    else
 	    {
-		// not inside try or need to return from current functions.
+		// Not inside try or need to return from current functions.
+		// Push a dummy return value.
+		if (GA_GROW(&ectx.ec_stack, 1) == FAIL)
+		    goto failed;
+		tv = STACK_TV_BOT(0);
+		tv->v_type = VAR_NUMBER;
+		tv->vval.v_number = 0;
+		++ectx.ec_stack.ga_len;
 		if (ectx.ec_frame_idx == initial_frame_idx)
 		{
-		    // At the toplevel we are done.  Push a dummy return value.
-		    if (GA_GROW(&ectx.ec_stack, 1) == FAIL)
-			goto failed;
-		    tv = STACK_TV_BOT(0);
-		    tv->v_type = VAR_NUMBER;
-		    tv->vval.v_number = 0;
-		    ++ectx.ec_stack.ga_len;
+		    // At the toplevel we are done.
 		    need_rethrow = TRUE;
 		    if (handle_closure_in_use(&ectx, FALSE) == FAIL)
 			goto failed;