From: Bram Moolenaar Date: Mon, 5 Sep 2022 09:47:13 +0000 (+0100) Subject: patch 9.0.0382: freeing the wrong string on failure X-Git-Tag: v9.0.0382 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=31ea6bf530a814991f669122dbc9921117a862c3;p=vim 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 index 021694b3c..596141307 100644 --- a/src/version.c +++ b/src/version.c @@ -703,6 +703,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 382, /**/ 381, /**/ diff --git a/src/vim9execute.c b/src/vim9execute.c index 3194f872f..08774fee3 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -937,21 +937,22 @@ add_defer_function(char_u *name, int argcount, typval_T *argvars) 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;