• R/O
  • SSH

vim: 提交

Mirror of the Vim source from https://github.com/vim/vim


Commit MetaInfo

修訂84fca115b1bb399286045bb5e95aa524c6f25dc3 (tree)
時間2020-10-31 02:45:04
作者Bram Moolenaar <Bram@vim....>
CommiterBram Moolenaar

Log Message

patch 8.2.1924: Vim9: crash when indexing dict with NULL key

Commit: https://github.com/vim/vim/commit/086fc9a585afa4317046fa0a36c7b896286e5128
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Oct 30 18:33:02 2020 +0100

patch 8.2.1924: Vim9: crash when indexing dict with NULL key
Problem: Vim9: crash when indexing dict with NULL key.
Solution: Use empty string instead of NULL. (closes https://github.com/vim/vim/issues/7229) Make error
message more useful for empty string.

Change Summary

差異

diff -r f9f8ec2acdea -r 84fca115b1bb src/globals.h
--- a/src/globals.h Thu Oct 29 20:30:05 2020 +0100
+++ b/src/globals.h Fri Oct 30 18:45:04 2020 +0100
@@ -1699,7 +1699,7 @@
16991699 EXTERN char e_toomanyarg[] INIT(= N_("E118: Too many arguments for function: %s"));
17001700 EXTERN char e_toofewarg[] INIT(= N_("E119: Not enough arguments for function: %s"));
17011701 EXTERN char e_func_deleted[] INIT(= N_("E933: Function was deleted: %s"));
1702-EXTERN char e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: %s"));
1702+EXTERN char e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: \"%s\""));
17031703 EXTERN char e_listreq[] INIT(= N_("E714: List required"));
17041704 EXTERN char e_listblobreq[] INIT(= N_("E897: List or Blob required"));
17051705 EXTERN char e_list_end[] INIT(= N_("E697: Missing end of List ']': %s"));
diff -r f9f8ec2acdea -r 84fca115b1bb src/testdir/test_vim9_expr.vim
--- a/src/testdir/test_vim9_expr.vim Thu Oct 29 20:30:05 2020 +0100
+++ b/src/testdir/test_vim9_expr.vim Fri Oct 30 18:45:04 2020 +0100
@@ -1917,6 +1917,7 @@
19171917 CheckDefExecFailure(['var x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 1)
19181918
19191919 CheckDefFailure(['var x = ({'], 'E723:', 2)
1920+ CheckDefExecFailure(['{}[getftype("")]'], 'E716: Key not present in Dictionary: ""', 1)
19201921 enddef
19211922
19221923 def Test_expr7_dict_vim9script()
diff -r f9f8ec2acdea -r 84fca115b1bb src/version.c
--- a/src/version.c Thu Oct 29 20:30:05 2020 +0100
+++ b/src/version.c Fri Oct 30 18:45:04 2020 +0100
@@ -751,6 +751,8 @@
751751 static int included_patches[] =
752752 { /* Add new patch number below this line */
753753 /**/
754+ 1924,
755+/**/
754756 1923,
755757 /**/
756758 1922,
diff -r f9f8ec2acdea -r 84fca115b1bb src/vim9execute.c
--- a/src/vim9execute.c Thu Oct 29 20:30:05 2020 +0100
+++ b/src/vim9execute.c Fri Oct 30 18:45:04 2020 +0100
@@ -2607,6 +2607,8 @@
26072607 tv = STACK_TV_BOT(-1);
26082608 // no need to check for VAR_STRING, 2STRING will check.
26092609 key = tv->vval.v_string;
2610+ if (key == NULL)
2611+ key = (char_u *)"";
26102612
26112613 if ((di = dict_find(dict, key, -1)) == NULL)
26122614 {
Show on old repository browser