summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-10-30 18:33:02 +0100
committerBram Moolenaar <Bram@vim.org>2020-10-30 18:33:02 +0100
commit086fc9a585afa4317046fa0a36c7b896286e5128 (patch)
tree105e3992c54ff08b2bd8fe6a7576c03671f98e5b
parent4f6b6ed208a15552f0eb7f27b7ca945f59f22c1d (diff)
patch 8.2.1924: Vim9: crash when indexing dict with NULL keyv8.2.1924
Problem: Vim9: crash when indexing dict with NULL key. Solution: Use empty string instead of NULL. (closes #7229) Make error message more useful for empty string.
-rw-r--r--src/globals.h2
-rw-r--r--src/testdir/test_vim9_expr.vim1
-rw-r--r--src/version.c2
-rw-r--r--src/vim9execute.c2
4 files changed, 6 insertions, 1 deletions
diff --git a/src/globals.h b/src/globals.h
index 5bdbad636f..379a532fac 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1699,7 +1699,7 @@ EXTERN char e_invalblob[] INIT(= N_("E978: Invalid operation for Blob"));
EXTERN char e_toomanyarg[] INIT(= N_("E118: Too many arguments for function: %s"));
EXTERN char e_toofewarg[] INIT(= N_("E119: Not enough arguments for function: %s"));
EXTERN char e_func_deleted[] INIT(= N_("E933: Function was deleted: %s"));
-EXTERN char e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: %s"));
+EXTERN char e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: \"%s\""));
EXTERN char e_listreq[] INIT(= N_("E714: List required"));
EXTERN char e_listblobreq[] INIT(= N_("E897: List or Blob required"));
EXTERN char e_list_end[] INIT(= N_("E697: Missing end of List ']': %s"));
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 568c3bf6a4..8f691e6b47 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1917,6 +1917,7 @@ def Test_expr7_dict()
CheckDefExecFailure(['var x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 1)
CheckDefFailure(['var x = ({'], 'E723:', 2)
+ CheckDefExecFailure(['{}[getftype("")]'], 'E716: Key not present in Dictionary: ""', 1)
enddef
def Test_expr7_dict_vim9script()
diff --git a/src/version.c b/src/version.c
index 52d8683984..0da78888bd 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 */
/**/
+ 1924,
+/**/
1923,
/**/
1922,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 09eb6c2210..9c46651938 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2607,6 +2607,8 @@ call_def_function(
tv = STACK_TV_BOT(-1);
// no need to check for VAR_STRING, 2STRING will check.
key = tv->vval.v_string;
+ if (key == NULL)
+ key = (char_u *)"";
if ((di = dict_find(dict, key, -1)) == NULL)
{