Mercurial > vim
diff src/eval.c @ 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 | 1a5ed2626b26 |
children | b4ce0e1fb5a6 |
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; }