0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.0507: getbufvar() may get the wrong dictionary

Problem:    Getbufvar() may get the wrong dictionary. (David le Blanc)
Solution:   Check for empty name. (closes #5878)
This commit is contained in:
Bram Moolenaar
2020-04-03 18:43:35 +02:00
parent d1e9dc2723
commit 5259275347
3 changed files with 19 additions and 2 deletions

View File

@@ -2382,6 +2382,7 @@ find_var(char_u *name, hashtab_T **htp, int no_autoload)
/*
* Find variable "varname" in hashtab "ht" with name "htname".
* When "varname" is empty returns curwin/curtab/etc vars dictionary.
* Returns NULL if not found.
*/
dictitem_T *
@@ -3503,8 +3504,12 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
else
{
// Look up the variable.
// Let getbufvar({nr}, "") return the "b:" dictionary.
v = find_var_in_ht(&buf->b_vars->dv_hashtab, 'b', varname, FALSE);
if (*varname == NUL)
// Let getbufvar({nr}, "") return the "b:" dictionary.
v = &buf->b_bufvar;
else
v = find_var_in_ht(&buf->b_vars->dv_hashtab, 'b',
varname, FALSE);
if (v != NULL)
{
copy_tv(&v->di_tv, rettv);

View File

@@ -841,6 +841,16 @@ func Test_getbufvar()
call assert_equal('iso-8859-2', getbufvar(bufnr('%'), '&fenc'))
close
" Get the b: dict.
let b:testvar = 'one'
new
let b:testvar = 'two'
let thebuf = bufnr()
wincmd w
call assert_equal('two', getbufvar(thebuf, 'testvar'))
call assert_equal('two', getbufvar(thebuf, '').testvar)
bwipe!
set fileformats&
endfunc

View File

@@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
507,
/**/
506,
/**/