mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
updated for version 7.2.443
Problem: Using taglist() on a tag file with duplicate fields generates an internal error. (Peter Odding) Solution: Check for duplicate field names.
This commit is contained in:
@@ -451,7 +451,6 @@ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
|
||||
static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
|
||||
static dict_T *dict_copy __ARGS((dict_T *orig, int deep, int copyID));
|
||||
static long dict_len __ARGS((dict_T *d));
|
||||
static dictitem_T *dict_find __ARGS((dict_T *d, char_u *key, int len));
|
||||
static char_u *dict2string __ARGS((typval_T *tv, int copyID));
|
||||
static int get_dict_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
|
||||
static char_u *echo_string __ARGS((typval_T *tv, char_u **tofree, char_u *numbuf, int copyID));
|
||||
@@ -7043,7 +7042,7 @@ dict_len(d)
|
||||
* If "len" is negative use strlen(key).
|
||||
* Returns NULL when not found.
|
||||
*/
|
||||
static dictitem_T *
|
||||
dictitem_T *
|
||||
dict_find(d, key, len)
|
||||
dict_T *d;
|
||||
char_u *key;
|
||||
|
@@ -56,6 +56,7 @@ dictitem_T *dictitem_alloc __ARGS((char_u *key));
|
||||
void dictitem_free __ARGS((dictitem_T *item));
|
||||
int dict_add __ARGS((dict_T *d, dictitem_T *item));
|
||||
int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
|
||||
dictitem_T *dict_find __ARGS((dict_T *d, char_u *key, int len));
|
||||
char_u *get_dict_string __ARGS((dict_T *d, char_u *key, int save));
|
||||
long get_dict_number __ARGS((dict_T *d, char_u *key));
|
||||
char_u *get_function_name __ARGS((expand_T *xp, int idx));
|
||||
|
14
src/tag.c
14
src/tag.c
@@ -3771,7 +3771,8 @@ expand_tags(tagnames, pat, num_file, file)
|
||||
static int add_tag_field __ARGS((dict_T *dict, char *field_name, char_u *start, char_u *end));
|
||||
|
||||
/*
|
||||
* Add a tag field to the dictionary "dict"
|
||||
* Add a tag field to the dictionary "dict".
|
||||
* Return OK or FAIL.
|
||||
*/
|
||||
static int
|
||||
add_tag_field(dict, field_name, start, end)
|
||||
@@ -3783,6 +3784,17 @@ add_tag_field(dict, field_name, start, end)
|
||||
char_u buf[MAXPATHL];
|
||||
int len = 0;
|
||||
|
||||
/* check that the field name doesn't exist yet */
|
||||
if (dict_find(dict, (char_u *)field_name, -1) != NULL)
|
||||
{
|
||||
if (p_verbose > 0)
|
||||
{
|
||||
verbose_enter();
|
||||
smsg((char_u *)_("Duplicate field name: %s"), field_name);
|
||||
verbose_leave();
|
||||
}
|
||||
return FAIL;
|
||||
}
|
||||
if (start != NULL)
|
||||
{
|
||||
if (end == NULL)
|
||||
|
Reference in New Issue
Block a user