mirror of
https://github.com/vim/vim.git
synced 2025-10-03 05:14:07 -04:00
patch 7.4.2160
Problem: setmatches() mixes up values. (Nikolai Pavlov) Solution: Save the string instead of reusing a shared buffer.
This commit is contained in:
@@ -418,6 +418,7 @@ dict_find(dict_T *d, char_u *key, int len)
|
|||||||
/*
|
/*
|
||||||
* Get a string item from a dictionary.
|
* Get a string item from a dictionary.
|
||||||
* When "save" is TRUE allocate memory for it.
|
* When "save" is TRUE allocate memory for it.
|
||||||
|
* When FALSE a shared buffer is used, can only be used once!
|
||||||
* Returns NULL if the entry doesn't exist or out of memory.
|
* Returns NULL if the entry doesn't exist or out of memory.
|
||||||
*/
|
*/
|
||||||
char_u *
|
char_u *
|
||||||
|
@@ -9659,11 +9659,11 @@ f_setmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
group = get_dict_string(d, (char_u *)"group", FALSE);
|
group = get_dict_string(d, (char_u *)"group", TRUE);
|
||||||
priority = (int)get_dict_number(d, (char_u *)"priority");
|
priority = (int)get_dict_number(d, (char_u *)"priority");
|
||||||
id = (int)get_dict_number(d, (char_u *)"id");
|
id = (int)get_dict_number(d, (char_u *)"id");
|
||||||
conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
|
conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
|
||||||
? get_dict_string(d, (char_u *)"conceal", FALSE)
|
? get_dict_string(d, (char_u *)"conceal", TRUE)
|
||||||
: NULL;
|
: NULL;
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
@@ -9677,6 +9677,8 @@ f_setmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
|||||||
list_unref(s);
|
list_unref(s);
|
||||||
s = NULL;
|
s = NULL;
|
||||||
}
|
}
|
||||||
|
vim_free(group);
|
||||||
|
vim_free(conceal);
|
||||||
|
|
||||||
li = li->li_next;
|
li = li->li_next;
|
||||||
}
|
}
|
||||||
|
@@ -194,3 +194,12 @@ func Test_funcref()
|
|||||||
let OneByRef = funcref('One')
|
let OneByRef = funcref('One')
|
||||||
call assert_equal(2, OneByRef())
|
call assert_equal(2, OneByRef())
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_setmatches()
|
||||||
|
hi def link 1 Comment
|
||||||
|
hi def link 2 PreProc
|
||||||
|
let set = [{"group": 1, "pattern": 2, "id": 3, "priority": 4, "conceal": 5}]
|
||||||
|
let exp = [{"group": '1', "pattern": '2', "id": 3, "priority": 4, "conceal": '5'}]
|
||||||
|
call setmatches(set)
|
||||||
|
call assert_equal(exp, getmatches())
|
||||||
|
endfunc
|
||||||
|
@@ -763,6 +763,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2160,
|
||||||
/**/
|
/**/
|
||||||
2159,
|
2159,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user