Mercurial > vim
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) {