changeset 5858:00228400629e v7.4.272

updated for version 7.4.272 Problem: Using just "$" does not cause an error message. Solution: Check for empty environment variable name. (Christian Brabandt)
author Bram Moolenaar <bram@vim.org>
date Tue, 29 Apr 2014 17:41:22 +0200
parents fddd2a7b6ea7
children d528535eadaa
files src/eval.c src/testdir/test_eval.in src/testdir/test_eval.ok src/version.c
diffstat 4 files changed, 37 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/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);
-
-		/* 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;
-	}
+	if (len == 0)
+           return FAIL; /* can't be an environment variable */
+
+	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;
     }
--- a/src/testdir/test_eval.in
+++ b/src/testdir/test_eval.in
@@ -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()
index f81927bae793f17312ce2f6dad8cf7fba80c8454..313f39eef393647a0c4727c03c1f546a10eaf8e0
GIT binary patch
literal 10986
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
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    272,
+/**/
     271,
 /**/
     270,