awk: do not allow $(-1)
function old new delta EMSG_NEGATIVE_FIELD - 25 +25 evaluate 3390 3403 +13 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/0 up/down: 38/0) Total: 38 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
c21dfaf836
commit
2454e678cb
@ -598,6 +598,7 @@ static const char EMSG_NOT_ARRAY[] ALIGN1 = "Not an array";
|
|||||||
static const char EMSG_POSSIBLE_ERROR[] ALIGN1 = "Possible syntax error";
|
static const char EMSG_POSSIBLE_ERROR[] ALIGN1 = "Possible syntax error";
|
||||||
static const char EMSG_UNDEF_FUNC[] ALIGN1 = "Call to undefined function";
|
static const char EMSG_UNDEF_FUNC[] ALIGN1 = "Call to undefined function";
|
||||||
static const char EMSG_NO_MATH[] ALIGN1 = "Math support is not compiled in";
|
static const char EMSG_NO_MATH[] ALIGN1 = "Math support is not compiled in";
|
||||||
|
static const char EMSG_NEGATIVE_FIELD[] ALIGN1 = "Access to negative field";
|
||||||
|
|
||||||
static void zero_out_var(var *vp)
|
static void zero_out_var(var *vp)
|
||||||
{
|
{
|
||||||
@ -2949,6 +2950,8 @@ static var *evaluate(node *op, var *res)
|
|||||||
|
|
||||||
case XC( OC_FIELD ): {
|
case XC( OC_FIELD ): {
|
||||||
int i = (int)getvar_i(R.v);
|
int i = (int)getvar_i(R.v);
|
||||||
|
if (i < 0)
|
||||||
|
syntax_error(EMSG_NEGATIVE_FIELD);
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
res = intvar[F0];
|
res = intvar[F0];
|
||||||
} else {
|
} else {
|
||||||
|
@ -339,5 +339,11 @@ testing "awk handles invalid for loop" \
|
|||||||
"awk '{ for() }' 2>&1" "awk: cmd. line:1: Unexpected token\n" "" ""
|
"awk '{ for() }' 2>&1" "awk: cmd. line:1: Unexpected token\n" "" ""
|
||||||
|
|
||||||
# testing "description" "command" "result" "infile" "stdin"
|
# testing "description" "command" "result" "infile" "stdin"
|
||||||
|
testing 'awk negative field access' \
|
||||||
|
'awk 2>&1 -- '\''{ $(-1) }'\' \
|
||||||
|
"awk: cmd. line:1: Access to negative field\n" \
|
||||||
|
'' \
|
||||||
|
'anything'
|
||||||
|
|
||||||
|
|
||||||
exit $FAILCOUNT
|
exit $FAILCOUNT
|
||||||
|
Loading…
Reference in New Issue
Block a user