diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-10-30 18:33:02 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-10-30 18:33:02 +0100 |
commit | 086fc9a585afa4317046fa0a36c7b896286e5128 (patch) | |
tree | 105e3992c54ff08b2bd8fe6a7576c03671f98e5b | |
parent | 4f6b6ed208a15552f0eb7f27b7ca945f59f22c1d (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.h | 2 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 1 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9execute.c | 2 |
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) { |