0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.2600: Vim9: crash when putting an unknown type in a dictionary

Problem:    Vim9: crash when putting an unknown type in a dictionary.
            (Yegappan Lakshmanan)
Solution:   Handle a NULL type pointer.
This commit is contained in:
Bram Moolenaar 2021-03-13 21:24:56 +01:00
parent edba70703b
commit 93e1cae739
3 changed files with 26 additions and 2 deletions

View File

@ -340,6 +340,26 @@ def Test_extend_list_item_type()
CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
enddef 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() def Test_job_info_return_type()
if has('job') if has('job')
job_start(&shell) job_start(&shell)

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2600,
/**/ /**/
2599, 2599,
/**/ /**/

View File

@ -919,6 +919,8 @@ equal_type(type_T *type1, type_T *type2)
{ {
int i; int i;
if (type1 == NULL || type2 == NULL)
return FALSE;
if (type1->tt_type != type2->tt_type) if (type1->tt_type != type2->tt_type)
return FALSE; return FALSE;
switch (type1->tt_type) 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 // If either is VAR_UNKNOWN use the other type. An empty list/dict has no
// specific type. // specific type.
if (type1->tt_type == VAR_UNKNOWN) if (type1 == NULL || type1->tt_type == VAR_UNKNOWN)
{ {
*dest = type2; *dest = type2;
return; return;
} }
if (type2->tt_type == VAR_UNKNOWN) if (type2 == NULL || type2->tt_type == VAR_UNKNOWN)
{ {
*dest = type1; *dest = type1;
return; return;