0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.1952: Vim9: crash when using a NULL dict key

Problem:    Vim9: crash when using a NULL dict key.
Solution:   Use a NULL dict key like an empty string. (closes #7249)
This commit is contained in:
Bram Moolenaar
2020-11-04 13:38:28 +01:00
parent 64ffa9b5fb
commit c7f7f6db3e
3 changed files with 10 additions and 3 deletions

View File

@@ -1903,6 +1903,8 @@ def Test_expr7_dict()
dictdict = #{one: #{}, two: #{a: 'text'}}
dictdict = #{one: #{}, two: #{}}
assert_equal({'': 0}, {matchstr('string', 'wont match'): 0})
CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1)
CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1)
CheckDefFailure(["var x = #{a :8}"], 'E1068:', 1)

View File

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

View File

@@ -1738,6 +1738,7 @@ call_def_function(
int count = iptr->isn_arg.number;
dict_T *dict = dict_alloc();
dictitem_T *item;
char_u *key;
if (dict == NULL)
goto failed;
@@ -1746,15 +1747,17 @@ call_def_function(
// have already checked key type is VAR_STRING
tv = STACK_TV_BOT(2 * (idx - count));
// check key is unique
item = dict_find(dict, tv->vval.v_string, -1);
key = tv->vval.v_string == NULL
? (char_u *)"" : tv->vval.v_string;
item = dict_find(dict, key, -1);
if (item != NULL)
{
SOURCING_LNUM = iptr->isn_lnum;
semsg(_(e_duplicate_key), tv->vval.v_string);
semsg(_(e_duplicate_key), key);
dict_unref(dict);
goto on_error;
}
item = dictitem_alloc(tv->vval.v_string);
item = dictitem_alloc(key);
clear_tv(tv);
if (item == NULL)
{