summaryrefslogtreecommitdiff
path: root/src/evalvars.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-10 10:37:38 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-10 10:37:38 +0000
commitdd297bc11d2793ba61638972778c57f2da14e8b5 (patch)
treefb7546a0a0274769ebc31001403383467c9d6e81 /src/evalvars.c
parentdee78e1ce857985c06ff18e20daeadfe1622b8ae (diff)
downloadvim-git-8.2.3771.tar.gz
patch 8.2.3771: Vim9: accessing freed memory when checking typev8.2.3771
Problem: Vim9: accessing freed memory when checking type. Solution: Make a copy of a function type.
Diffstat (limited to 'src/evalvars.c')
-rw-r--r--src/evalvars.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/evalvars.c b/src/evalvars.c
index 60df7238f..d91ec014a 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -3291,6 +3291,7 @@ set_var_const(
int vim9script = in_vim9script();
int var_in_vim9script;
int flags = flags_arg;
+ int free_tv_arg = !copy; // free tv_arg if not used
ht = find_var_ht(name, &varname);
if (ht == NULL || *varname == NUL)
@@ -3545,6 +3546,7 @@ set_var_const(
dest_tv->v_lock = 0;
init_tv(tv);
}
+ free_tv_arg = FALSE;
if (vim9script && type != NULL)
{
@@ -3573,10 +3575,9 @@ set_var_const(
// if the reference count is up to one. That locks only literal
// values.
item_lock(dest_tv, DICT_MAXNEST, TRUE, TRUE);
- return;
failed:
- if (!copy)
+ if (free_tv_arg)
clear_tv(tv_arg);
}