mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
updated for version 7.4.272
Problem: Using just "$" does not cause an error message. Solution: Check for empty environment variable name. (Christian Brabandt)
This commit is contained in:
51
src/eval.c
51
src/eval.c
@@ -7798,7 +7798,7 @@ string2float(text, value)
|
||||
* Get the value of an environment variable.
|
||||
* "arg" is pointing to the '$'. It is advanced to after the name.
|
||||
* If the environment variable was not set, silently assume it is empty.
|
||||
* Always return OK.
|
||||
* Return FAIL if the name is invalid.
|
||||
*/
|
||||
static int
|
||||
get_env_tv(arg, rettv, evaluate)
|
||||
@@ -7817,32 +7817,33 @@ get_env_tv(arg, rettv, evaluate)
|
||||
len = get_env_len(arg);
|
||||
if (evaluate)
|
||||
{
|
||||
if (len != 0)
|
||||
{
|
||||
cc = name[len];
|
||||
name[len] = NUL;
|
||||
/* first try vim_getenv(), fast for normal environment vars */
|
||||
string = vim_getenv(name, &mustfree);
|
||||
if (string != NULL && *string != NUL)
|
||||
{
|
||||
if (!mustfree)
|
||||
string = vim_strsave(string);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mustfree)
|
||||
vim_free(string);
|
||||
if (len == 0)
|
||||
return FAIL; /* can't be an environment variable */
|
||||
|
||||
/* next try expanding things like $VIM and ${HOME} */
|
||||
string = expand_env_save(name - 1);
|
||||
if (string != NULL && *string == '$')
|
||||
{
|
||||
vim_free(string);
|
||||
string = NULL;
|
||||
}
|
||||
}
|
||||
name[len] = cc;
|
||||
cc = name[len];
|
||||
name[len] = NUL;
|
||||
/* first try vim_getenv(), fast for normal environment vars */
|
||||
string = vim_getenv(name, &mustfree);
|
||||
if (string != NULL && *string != NUL)
|
||||
{
|
||||
if (!mustfree)
|
||||
string = vim_strsave(string);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mustfree)
|
||||
vim_free(string);
|
||||
|
||||
/* next try expanding things like $VIM and ${HOME} */
|
||||
string = expand_env_save(name - 1);
|
||||
if (string != NULL && *string == '$')
|
||||
{
|
||||
vim_free(string);
|
||||
string = NULL;
|
||||
}
|
||||
}
|
||||
name[len] = cc;
|
||||
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = string;
|
||||
}
|
||||
|
@@ -183,6 +183,13 @@ endfun
|
||||
:" script-local function used in Funcref must exist.
|
||||
:so test_eval_func.vim
|
||||
:"
|
||||
:" Using $ instead of '$' must give an error
|
||||
:try
|
||||
: call append($, 'foobar')
|
||||
:catch
|
||||
:$put =v:exception
|
||||
:endtry
|
||||
:"
|
||||
:/^start:/+1,$wq! test.out
|
||||
:" vim: et ts=4 isk-=\: fmr=???,???
|
||||
:call getchar()
|
||||
|
Binary file not shown.
@@ -734,6 +734,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
272,
|
||||
/**/
|
||||
271,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user