To: vim_dev@googlegroups.com Subject: Patch 7.4.272 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.272 Problem: Using just "$" does not cause an error message. Solution: Check for empty environment variable name. (Christian Brabandt) Files: src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok *** ../vim-7.4.271/src/eval.c 2014-04-29 14:02:42.543919791 +0200 --- src/eval.c 2014-04-29 17:33:40.575697949 +0200 *************** *** 7798,7804 **** * 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. */ static int get_env_tv(arg, rettv, evaluate) --- 7798,7804 ---- * 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. ! * Return FAIL if the name is invalid. */ static int get_env_tv(arg, rettv, evaluate) *************** *** 7817,7848 **** 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; } rettv->v_type = VAR_STRING; rettv->vval.v_string = string; } --- 7817,7849 ---- len = get_env_len(arg); if (evaluate) { ! 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; } *** ../vim-7.4.271/src/testdir/test_eval.in 2014-04-29 14:02:42.543919791 +0200 --- src/testdir/test_eval.in 2014-04-29 17:35:27.243696080 +0200 *************** *** 183,188 **** --- 183,195 ---- :" 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() *** ../vim-7.4.271/src/testdir/test_eval.ok 2014-04-29 14:02:42.543919791 +0200 --- src/testdir/test_eval.ok 2014-04-29 17:36:41.451694779 +0200 *************** *** 345,347 **** --- 345,348 ---- func s:Testje exists: 1 Bar exists: 1 func Bar exists: 1 + Vim(call):E116: Invalid arguments for function append *** ../vim-7.4.271/src/version.c 2014-04-29 15:55:39.443801021 +0200 --- src/version.c 2014-04-29 17:31:54.203699814 +0200 *************** *** 736,737 **** --- 736,739 ---- { /* Add new patch number below this line */ + /**/ + 272, /**/ -- From "know your smileys": C=}>;*{)) Drunk, devilish chef with a toupee in an updraft, a mustache, and a double chin /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///