mirror of
https://github.com/neovim/neovim.git
synced 2025-10-05 17:36:29 +00:00
vim-patch:8.2.0920: writing viminfo fails with a circular reference
Problem: Writing viminfo fails with a circular reference.
Solution: Use copyID to detect the cycle. (closes vim/vim#6217)
5b157fe2ed
This commit is contained in:
@@ -2679,7 +2679,30 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
|
||||
switch (vartv.v_type) {
|
||||
case VAR_FUNC:
|
||||
case VAR_PARTIAL:
|
||||
tv_clear(&vartv);
|
||||
continue;
|
||||
case VAR_DICT:
|
||||
{
|
||||
dict_T *di = vartv.vval.v_dict;
|
||||
int copyID = get_copyID();
|
||||
if (!set_ref_in_ht(&di->dv_hashtab, copyID, NULL)
|
||||
&& copyID == di->dv_copyID) {
|
||||
tv_clear(&vartv);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VAR_LIST:
|
||||
{
|
||||
list_T *l = vartv.vval.v_list;
|
||||
int copyID = get_copyID();
|
||||
if (!set_ref_in_list(l, copyID, NULL)
|
||||
&& copyID == l->lv_copyID) {
|
||||
tv_clear(&vartv);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user