# HG changeset patch # User Bram Moolenaar # Date 1597347905 -7200 # Node ID 837e6a429950e6d4eb6ab657e01379306bdc694d # Parent 97b64b16fd66cd49ddb08c537cfe625ade3ce54e patch 8.2.1443: Vim9: crash when interrupting a nested :def function Commit: https://github.com/vim/vim/commit/cdd70f09a5340c3d7ae873f1aaaf9847f27410cc Author: Bram Moolenaar 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) diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9execute.c b/src/vim9execute.c --- 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;