mirror of
https://github.com/vim/vim.git
synced 2025-07-25 10:54:51 -04:00
patch 7.4.2323
Problem: Using freed memory when using 'formatexpr'. (Dominique Pelle) Solution: Make a copy of 'formatexpr' before evaluating it.
This commit is contained in:
parent
bc54f3f3fe
commit
d77f9d595e
@ -4741,6 +4741,7 @@ fex_format(
|
|||||||
int use_sandbox = was_set_insecurely((char_u *)"formatexpr",
|
int use_sandbox = was_set_insecurely((char_u *)"formatexpr",
|
||||||
OPT_LOCAL);
|
OPT_LOCAL);
|
||||||
int r;
|
int r;
|
||||||
|
char_u *fex;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set v:lnum to the first line number and v:count to the number of lines.
|
* Set v:lnum to the first line number and v:count to the number of lines.
|
||||||
@ -4750,16 +4751,22 @@ fex_format(
|
|||||||
set_vim_var_nr(VV_COUNT, count);
|
set_vim_var_nr(VV_COUNT, count);
|
||||||
set_vim_var_char(c);
|
set_vim_var_char(c);
|
||||||
|
|
||||||
|
/* Make a copy, the option could be changed while calling it. */
|
||||||
|
fex = vim_strsave(curbuf->b_p_fex);
|
||||||
|
if (fex == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Evaluate the function.
|
* Evaluate the function.
|
||||||
*/
|
*/
|
||||||
if (use_sandbox)
|
if (use_sandbox)
|
||||||
++sandbox;
|
++sandbox;
|
||||||
r = (int)eval_to_number(curbuf->b_p_fex);
|
r = (int)eval_to_number(fex);
|
||||||
if (use_sandbox)
|
if (use_sandbox)
|
||||||
--sandbox;
|
--sandbox;
|
||||||
|
|
||||||
set_vim_var_string(VV_CHAR, NULL, -1);
|
set_vim_var_string(VV_CHAR, NULL, -1);
|
||||||
|
vim_free(fex);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -192,6 +192,30 @@ func! Test_normal05_formatexpr()
|
|||||||
bw!
|
bw!
|
||||||
endfu
|
endfu
|
||||||
|
|
||||||
|
func Test_normal05_formatexpr_newbuf()
|
||||||
|
" Edit another buffer in the 'formatexpr' function
|
||||||
|
new
|
||||||
|
func! Format()
|
||||||
|
edit another
|
||||||
|
endfunc
|
||||||
|
set formatexpr=Format()
|
||||||
|
norm gqG
|
||||||
|
bw!
|
||||||
|
set formatexpr=
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_normal05_formatexpr_setopt()
|
||||||
|
" Change the 'formatexpr' value in the function
|
||||||
|
new
|
||||||
|
func! Format()
|
||||||
|
set formatexpr=
|
||||||
|
endfunc
|
||||||
|
set formatexpr=Format()
|
||||||
|
norm gqG
|
||||||
|
bw!
|
||||||
|
set formatexpr=
|
||||||
|
endfunc
|
||||||
|
|
||||||
func! Test_normal06_formatprg()
|
func! Test_normal06_formatprg()
|
||||||
" basic test for formatprg
|
" basic test for formatprg
|
||||||
" only test on non windows platform
|
" only test on non windows platform
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
2323,
|
||||||
/**/
|
/**/
|
||||||
2322,
|
2322,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user