# HG changeset patch # User Bram Moolenaar # Date 1662372006 -7200 # Node ID 53e7e912eeecd65203670cccee7a71e61b22c5ff # Parent 44d3ef8599bcbb6076d3d544b1ff35e0aefa9ace patch 9.0.0382: freeing the wrong string on failure Commit: https://github.com/vim/vim/commit/31ea6bf530a814991f669122dbc9921117a862c3 Author: Bram Moolenaar Date: Mon Sep 5 10:47:13 2022 +0100 patch 9.0.0382: freeing the wrong string on failure Problem: Freeing the wrong string on failure. Solution: Adjust the argument. Reorder the code. diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 382, +/**/ 381, /**/ 380, diff --git a/src/vim9execute.c b/src/vim9execute.c --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -937,21 +937,22 @@ add_defer_function(char_u *name, int arg if (dfunc->df_defer_var_idx == 0) { iemsg("df_defer_var_idx is zero"); - vim_free(func_tv.vval.v_string); + vim_free(name); return FAIL; } - func_tv.v_type = VAR_FUNC; - func_tv.v_lock = 0; - func_tv.vval.v_string = name; l = add_defer_item(dfunc->df_defer_var_idx - 1, 1, current_ectx); if (l == NULL) { - vim_free(func_tv.vval.v_string); + vim_free(name); return FAIL; } + func_tv.v_type = VAR_FUNC; + func_tv.v_lock = 0; + func_tv.vval.v_string = name; list_set_item(l, 0, &func_tv); + for (i = 0; i < argcount; ++i) list_set_item(l, i + 1, argvars + i); return OK;