diff src/vim9execute.c @ 24541:df90c61c306c v8.2.2810

patch 8.2.2810: Vim9: crash when calling a function in a substitute expression Commit: https://github.com/vim/vim/commit/d386e923c751f389b2ac038ff2cb7b40035f8cc6 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Apr 25 14:48:49 2021 +0200 patch 8.2.2810: Vim9: crash when calling a function in a substitute expression Problem: Vim9: crash when calling a function in a substitute expression. Solution: Set the instructions back to the substitute expression instrunctions. (closes #8148)
author Bram Moolenaar <Bram@vim.org>
date Sun, 25 Apr 2021 15:00:04 +0200
parents e7577f79d6eb
children fe29b220eece
line wrap: on
line diff
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -601,6 +601,12 @@ func_return(ectx_T *ectx)
 				       + STACK_FRAME_IDX_OFF)->vval.v_number;
     ectx->ec_instr = INSTRUCTIONS(prev_dfunc);
 
+    // If the call was inside an ISN_SUBSTITUTE instruction need to use its
+    // list of instructions.
+    if (ectx->ec_instr[ectx->ec_iidx - 1].isn_type == ISN_SUBSTITUTE)
+	ectx->ec_instr = ectx->ec_instr[ectx->ec_iidx - 1]
+						      .isn_arg.subs.subs_instr;
+
     if (floc == NULL)
 	ectx->ec_funclocal.floc_restore_cmdmod = FALSE;
     else