diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-03-13 21:24:56 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-03-13 21:24:56 +0100 |
commit | 93e1cae739c32baf28954b64718bab009c6ee2ac (patch) | |
tree | ee7d7023bf29ae1b50b4edc9a4665a8cb5a2feee /src | |
parent | edba70703b6eaee3365ddfd82e4ba56ee08486f8 (diff) |
patch 8.2.2600: Vim9: crash when putting an unknown type in a dictionaryv8.2.2600
Problem: Vim9: crash when putting an unknown type in a dictionary.
(Yegappan Lakshmanan)
Solution: Handle a NULL type pointer.
Diffstat (limited to 'src')
-rw-r--r-- | src/testdir/test_vim9_builtin.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9type.c | 6 |
3 files changed, 26 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 8ec3db1482..75bbc0c506 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -340,6 +340,26 @@ def Test_extend_list_item_type() CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) enddef +def Test_extend_with_error_function() + var lines =<< trim END + vim9script + def F() + { + var m = 10 + } + echo m + enddef + + def Test() + var d: dict<any> = {} + d->extend({A: 10, Func: function('F', [])}) + enddef + + Test() + END + CheckScriptFailure(lines, 'E1001: Variable not found: m') +enddef + def Test_job_info_return_type() if has('job') job_start(&shell) diff --git a/src/version.c b/src/version.c index 9a4fa46808..72d38783d4 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2600, +/**/ 2599, /**/ 2598, diff --git a/src/vim9type.c b/src/vim9type.c index d1ada8e96b..9eda30d6e6 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -919,6 +919,8 @@ equal_type(type_T *type1, type_T *type2) { int i; + if (type1 == NULL || type2 == NULL) + return FALSE; if (type1->tt_type != type2->tt_type) return FALSE; switch (type1->tt_type) @@ -969,12 +971,12 @@ common_type(type_T *type1, type_T *type2, type_T **dest, garray_T *type_gap) // If either is VAR_UNKNOWN use the other type. An empty list/dict has no // specific type. - if (type1->tt_type == VAR_UNKNOWN) + if (type1 == NULL || type1->tt_type == VAR_UNKNOWN) { *dest = type2; return; } - if (type2->tt_type == VAR_UNKNOWN) + if (type2 == NULL || type2->tt_type == VAR_UNKNOWN) { *dest = type1; return; |