diff src/vim9execute.c @ 22808:96dbb61a54c2 v8.2.1952

patch 8.2.1952: Vim9: crash when using a NULL dict key Commit: https://github.com/vim/vim/commit/c7f7f6db3e9d3b6b723ed17d5244c83859583832 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Nov 4 13:38:28 2020 +0100 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 https://github.com/vim/vim/issues/7249)
author Bram Moolenaar <Bram@vim.org>
date Wed, 04 Nov 2020 13:45:05 +0100
parents d235c5fa0bbe
children 2d05dd71aac3
line wrap: on
line diff
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -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)
 			{