diff options
author | Michael Ennen <mike.ennen@gmail.com> | 2016-05-10 22:22:56 -0700 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2016-06-09 21:18:09 -0400 |
commit | b1c9d7d2379c91e16fca461f983e2014c720ab8a (patch) | |
tree | dd105471752b77b8c6fd875b9b3b2c738d5b5b01 /src/nvim/eval.c | |
parent | 38d98bba6808fcdd97717d1ce0d4df3589cb9ff7 (diff) | |
download | rneovim-b1c9d7d2379c91e16fca461f983e2014c720ab8a.tar.gz rneovim-b1c9d7d2379c91e16fca461f983e2014c720ab8a.tar.bz2 rneovim-b1c9d7d2379c91e16fca461f983e2014c720ab8a.zip |
vim-patch:7.4.1223
Problem: Crash when setting v:errors to a number.
Solution: Free the typval without assuming its type. (Yasuhiro Matsumoto)
https://github.com/vim/vim/commit/a542c680a8b42cb766e64d4ee7374ef4dacb7832
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 3cd53b841d..c300cc7974 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -508,6 +508,7 @@ void eval_init(void) /* add to compat scope dict */ hash_add(&compat_hashtab, p->vv_di.di_key); } + vimvars[VV_VERSION].vv_nr = VIM_VERSION_100; dict_T *const msgpack_types_dict = dict_alloc(); for (size_t i = 0; i < ARRAY_SIZE(msgpack_type_names); i++) { @@ -17720,7 +17721,8 @@ void set_vim_var_special(const VimVarIndex idx, const SpecialVarValue val) void set_vim_var_string(const VimVarIndex idx, const char *const val, const ptrdiff_t len) { - xfree(vimvars[idx].vv_str); + clear_tv(&vimvars[idx].vv_di.di_tv); + vimvars[idx].vv_type = VAR_STRING; if (val == NULL) { vimvars[idx].vv_str = NULL; } else if (len == -1) { @@ -17736,7 +17738,8 @@ void set_vim_var_string(const VimVarIndex idx, const char *const val, /// @param[in,out] val Value to set to. Reference count will be incremented. void set_vim_var_list(const VimVarIndex idx, list_T *const val) { - list_unref(vimvars[idx].vv_list); + clear_tv(&vimvars[idx].vv_di.di_tv); + vimvars[idx].vv_type = VAR_LIST; vimvars[idx].vv_list = val; if (val != NULL) { val->lv_refcount++; @@ -17750,7 +17753,8 @@ void set_vim_var_list(const VimVarIndex idx, list_T *const val) /// Also keys of the dictionary will be made read-only. void set_vim_var_dict(const VimVarIndex idx, dict_T *const val) { - dict_unref(vimvars[idx].vv_dict); + clear_tv(&vimvars[idx].vv_di.di_tv); + vimvars[idx].vv_type = VAR_DICT; vimvars[idx].vv_dict = val; if (val != NULL) { |