echo T.errmsg: check some error messages
awk=${awk-../a.out}
ls >glop
awk=$awk awk '
{ pat = $0
prog = ""
while (getline x > 0 && x != "")
prog = prog "\n" x
print sprintf("\n%s '"'"'%s'"'"' <glop >>devnull 2>foo",
ENVIRON["awk"], prog)
print sprintf("grep '"'"'%s'"'"' foo >>devnull || echo '"'"'BAD: %s'"'"' failed", pat, pat)
}
' >foo.sh <<\!!!!
illegal primary in regular expression
/(/
illegal break, continue, next or nextfile from BEGIN
BEGIN { nextfile }
illegal break, continue, next or nextfile from END
END { nextfile }
nextfile is illegal inside a function
function foo() { nextfile }
duplicate argument
function f(i,j,i) { return i }
nonterminated character class
/[[/
nonterminated character class
/[]/
nonterminated character class
/[\
nonterminated character class
BEGIN { s = "[x"; if (1 ~ s) print "foo"}
syntax error in regular expression
BEGIN { if ("x" ~ /$^/) print "ugh" }
syntax error in regular expression
/((.)/
division by zero
BEGIN { print 1/0 }
division by zero in /=
BEGIN { x = 1; print x /= 0 }
division by zero in %=
BEGIN { x = 1; print x %= 0 }
division by zero in mod
BEGIN { print 1%0 }
can.t read value.* array name.
BEGIN { x[1] = 0; split("a b c", y, x) }
can.t read value.* function
function f(){}; {split($0, x, f)}
can.t assign.* a function
function f(){}; {f = split($0, x)}
can.t assign to x; it.s an array name.
{x = split($0, x)}
is a function, not an array
function f(){}; {split($0, f)}
function f called with 1 args, uses only 0
BEGIN { f(f) }
function f() { print "x" }
can.t use function f as argument in f
BEGIN { f(f) }
function f() { print "x" }
x is an array, not a function
{ split($0, x) }; function x() {}
illegal nested function
function x() { function g() {} }
return not in function
{ return }
break illegal outside
{ break }
continue illegal outside
{ continue }
non-terminated string
{ print "abc
}
illegal field $(foo)
BEGIN { print $"foo" }
next is illegal inside a function
BEGIN { f() }
function f() { next }
not enough args in printf(%s)
BEGIN { printf("%s") }
weird printf conversion
BEGIN { printf("%z", "foo")}
function f has .* arguments, limit .*
function f(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,
e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10) {}
BEGIN { f(123) }
bailing out
])}
bailing out
{ print }}
bailing out
{ print }}}
bailing out
]
bailing out
[
bailing out
a & b
extra )
{ x = 1) }
illegal statement
{ print ))}
illegal statement
{{ print }
illegal statement
{{{ print }
illegal .*next.* from BEGIN
BEGIN { next }
illegal .*next.* from END
END { next; print NR }
can.t open file /etc/passwd
BEGIN { print "abc" >"/etc/passwd" }
you can.t define function f more than once
function f() { print 1 }
function f() { print 2 }
function mp called with 1 args, uses only 0
function mp(){ cnt++;}
BEGIN { mp(xx) }
index.*doesn.t permit regular expressions
BEGIN { index("abc", /a/) }
log argument out of domain
BEGIN { print log(-1) }
exp result out of range
BEGIN {print exp(1000)}
null file name in print or getline
BEGIN { print >foo }
function has too many arguments
BEGIN { length("abc", "def") }
calling undefined function foo
BEGIN { foo() }
this should print a BAD message
BEGIN { print }
!!!
echo ' running tests in foo.sh'
sh foo.sh
test -r core && echo BAD: someone dropped core 1>&2
echo xxx >foo0
$awk '{print x}' x='a
b' foo0 >foo1 2>foo2
grep 'newline in string' foo2 >/dev/null || echo 'BAD: T.errmsg newline in string'
$awk -safe 'BEGIN{"date" | getline}' >foo 2>foo2
grep 'cmd | getline is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg cmd|getline unsafe'
$awk -safe 'BEGIN{print >"foo"}' >foo 2>foo2
grep 'print > is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print > unsafe'
$awk -safe 'BEGIN{print >> "foo"}' >foo 2>foo2
grep 'print >> is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print >> unsafe'
$awk -safe 'BEGIN{print | "foo"}' >foo 2>foo2
grep 'print | is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print | unsafe'
$awk -safe 'BEGIN {system("date")}' >foo 2>foo2
grep 'system is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg system unsafe'
!!!!