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

Fixed memory leak in ":ownsyntax".

This commit is contained in:
Bram Moolenaar
2010-06-06 15:21:10 +02:00
parent 56be950094
commit 1950c3529b
4 changed files with 27 additions and 26 deletions

View File

@@ -3537,8 +3537,7 @@ syn_cmd_clear(eap, syncing)
syntax_clear(curwin->w_s);
if (curwin->w_s == &curwin->w_buffer->b_s)
do_unlet((char_u *)"b:current_syntax", TRUE);
else
do_unlet((char_u *)"w:current_syntax", TRUE);
do_unlet((char_u *)"w:current_syntax", TRUE);
}
}
@@ -6157,6 +6156,9 @@ ex_syntax(eap)
ex_ownsyntax(eap)
exarg_T *eap;
{
char_u *old_value;
char_u *new_value;
if (curwin->w_s == &curwin->w_buffer->b_s)
{
curwin->w_s = (synblock_T *)alloc(sizeof(synblock_T));
@@ -6170,7 +6172,26 @@ ex_ownsyntax(eap)
clear_string_option(&curwin->w_s->b_p_spl);
#endif
}
/* save value of b:current_syntax */
old_value = get_var_value((char_u *)"b:current_syntax");
if (old_value != NULL)
old_value = vim_strsave(old_value);
/* Apply the "syntax" autocommand event, this finds and loads the syntax
* file. */
apply_autocmds(EVENT_SYNTAX, eap->arg, curbuf->b_fname, TRUE, curbuf);
/* move value of b:current_syntax to w:current_syntax */
new_value = get_var_value((char_u *)"b:current_syntax");
set_internal_string_var((char_u *)"w:current_syntax", new_value);
/* restore value of b:current_syntax */
if (old_value != NULL)
{
set_internal_string_var((char_u *)"b:current_syntax", old_value);
vim_free(old_value);
}
}
int