# HG changeset patch # User Bram Moolenaar # Date 1398786082 -7200 # Node ID 00228400629e28384f7f52556c3c119ba0d0a44d # Parent fddd2a7b6ea7cc7785b2646ddaec686aa45a0178 updated for version 7.4.272 Problem: Using just "$" does not cause an error message. Solution: Check for empty environment variable name. (Christian Brabandt) diff --git a/src/eval.c b/src/eval.c --- 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; } diff --git a/src/testdir/test_eval.in b/src/testdir/test_eval.in --- 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() diff --git a/src/testdir/test_eval.ok b/src/testdir/test_eval.ok index f81927bae793f17312ce2f6dad8cf7fba80c8454..313f39eef393647a0c4727c03c1f546a10eaf8e0 GIT binary patch literal 10986 zc%02zOHboS5bm?3xpHo04*`i$Vmr(us~nQp0VFh+8O;T8u!DiDjDr$0GYIW}-+om; z>}nHWc3BSCuCDsN>ULFib&|)&$B>pqP3vM?Z-d^L)(>|D{qZOLk(Kwwm}dEs?w|MB zrGIg7NQ+;0n}$#ueYcGWYDJzhdj}ftTti15Om=g##~yoJEN-~rBcJXp+pd;$ThyE4 zTFsluBPH4IXZ=IUk*55*>>mUfMmJS_Q`b>j984y`gx^nGf?N^I`1J=P$T5PMLYlb* zwipOz4T7a2nDcAN2$tAd&tXmHE`uZI6#SN79ga)Ik?`wx#&L;pB!HE;9FAOZBrT3Y zaisj3Gmb)W?2T-aRAHqqhb@McN*fGUiebU8dyL@XdPuV$pl5 zpiW%|TMP`R6PcIOySt*gTvgX}%l?%GEmu{sr9W5o4e%bgUQ8iVmyoJcG*yKPB&O7N zlNMFb=_>>i4|NGSHpSv!+6q15;7e1)iw<3tCzi04F=j=g9hO9LNp*zLKzaS#$<|#+ z>9`#96-N0!GjC}WI#39ufmMf?urpm$M)`}xt(UDsjv6r^RBGYb2O={y4mnHt^UZxT=&$X$gw zY{$A*%<=tL=$PGCTQ#<4znb2yg`ia(w63m~b1asCL1?yVGzRL{(?+nw;H8i^JWZgx z$YJYG&}2-AP}0qWwrX@6UM+AYQLiw`T}M)AL9`<&>PSk2l5RP)mD`f|wRDG~97%nS z=pah5AW{tCzm5@i5)uUSYZogOVrd|K6yjE(EugK^fwsT`Z9#;N?xM7j+hzH+bkh|G zNvo0ga`t5VK)hRbq<7)w2I!8!wj8yVVI~RG63o!Lt+8gJL^euUdsG)FMu%iK@m80J z=#qgjVZ%^OqM$XiM9-|Wa?@@74Pt^2V#9C{KnPQq93J%sEJe7mVTfadYoRBXTamlx zY*q{XW)=t`GO9zB?U7W*>DQvJd6bqbb_VSVRDL3r@fPdIl0tP|ao)_EPEC_Y zsuyA6cKKH+A$CA~0}w1s!^$7kdBssH$2wI_(n%3|?p3c{=;J#&gowPDUEB^8xNGkD z&$WfF0OCzv@E$>hhRFrIRnWmCwXu+byXJZLnWnnQ(19t3{LxwJ{Q~bkAmZf3oL=n6 zgS+N|=ef4fx5R;pT{(g_F)G?}y#*y`ZkYg;>R6b&_m_S4q;9 zh%X2ArKns1u7oBlF*y_InAiKs$IhH3>N)C8K+9Lj(wWRJ2DNr6Yn!4f*C_!}ge5&O zDR(rK>u@x5K4lnorN8uA7RV@?Ra1ry&pQ+ zJ9;09dm^(K*k0p~Q$pW>UKd-AqAIMg z543TBSb9&qqtbPT3yd@TDYiyNAcR-r|4NqwtCA`p^=(WLFx^SL#viA;zXdZwQ$08l!rstJ1H{$$>-P^9hm|B*2MSa`UeK? z_vMO4t``tk4>9pT!>5kF$4%!m&Hsr@`g;qBr(Y|8$rr1jtPvLo8jWnTyrEfjDdt&h zx2tv4_;tc6tm=*0YBD&1_>n{AN(Dwg-65nN_vX*$2}tJ{4pIT)v5 z_<2mftZQ0S>-%f=CO6mjw?)Oe#;f&)UfoyAn!VAnvh^T_{{p1^1oV)O8rYx4^xJw( zZ?o#*Wyt5Oc0>;7$9OoV_xvX;^o%vkG~3dQeyul5;P>wF?*>K)7|BYwk!>D!Lt^th zzj&oXy+Mzm^g{N(7xi4UPoHAGBqCAovbrudRU=_3gJ3+xhAry@t=OwuuB$p*RkZ%O zrfg|%*BkZY9v}bYZTUma&dIqO7yP>WigGoG9Ufv43$cZIrd4)Z(A#@vvaPdCEsszc z9tZO6Say&m)5C92$dHCp~#(KuGLe?WVG1bjJ)OS)LEdD2=>k@FNE1l#d9 vX7*RXUK2k=j_EMqj?k7o3})HJdJ