| echo T.overflow: test some overflow conditions |
| |
| awk=${awk-../a.out} |
| |
| $awk 'BEGIN { |
| for (i = 0; i < 1000; i++) printf("abcdefghijklmnopqsrtuvwxyz") |
| printf("\n") |
| exit |
| }' >foo1 |
| $awk '{print}' foo1 >foo2 |
| cmp -s foo1 foo2 || echo 'BAD: T.overflow record 1' |
| |
| echo 'abcdefghijklmnopqsrtuvwxyz' >foo1 |
| echo hello | $awk ' |
| { for (i = 1; i < 500; i++) s = s "abcdefghijklmnopqsrtuvwxyz " |
| $0 = s |
| print $1 |
| }' >foo2 |
| cmp -s foo1 foo2 || echo 'BAD: T.overflow abcdef' |
| |
| # default input record 3072, fields 200: |
| $awk ' |
| BEGIN { |
| for (j = 0; j < 2; j++) { |
| for (i = 0; i < 500; i++) |
| printf(" 123456789") |
| printf("\n"); |
| } |
| } ' >foo1 |
| $awk '{$1 = " 123456789"; print}' foo1 >foo2 |
| cmp -s foo1 foo2 || echo 'BAD: T.overflow -mr -mf set $1' |
| |
| $awk ' |
| BEGIN { |
| for (j = 0; j < 2; j++) { |
| for (i = 0; i < 500; i++) |
| printf(" 123456789") |
| printf("\n"); |
| } |
| } ' >foo |
| $awk '{print NF}' foo >foo1 |
| echo '500 |
| 500' >foo2 |
| cmp -s foo1 foo2 || echo 'BAD: T.overflow -mr -mf NF' |
| |
| rm -f core |
| # this should not drop core |
| $awk 'BEGIN { |
| for (i = 1; i < 1000; i++) s = s "a-z" |
| if ("x" ~ "[" s "]") |
| print "ugh" |
| }' >foo 2>foo |
| test -r core && echo 1>&2 "BAD: T.overflow too long char class dropped core" |
| |
| echo 4000004 >foo1 |
| $awk ' |
| BEGIN { |
| x1 = sprintf("%1000000s\n", "hello") |
| x2 = sprintf("%-1000000s\n", "world") |
| x3 = sprintf("%1000000.1000000s\n", "goodbye") |
| x4 = sprintf("%-1000000.1000000s\n", "goodbye") |
| print length(x1 x2 x3 x4) |
| }' >foo2 |
| cmp -s foo1 foo2 || echo 'BAD: T.overflow huge sprintfs' |
| |
| echo 0 >foo1 |
| $awk ' |
| BEGIN { |
| for (i = 0; i < 100000; i++) |
| x[i] = i |
| for (i in x) |
| delete x[i] |
| n = 0 |
| for (i in x) |
| n++ |
| print n |
| }' >foo2 |
| cmp -s foo1 foo2 || echo 'BAD: T.overflow big array' |
| |
| echo x >foo1 |
| $awk '{print $40000000000000}' <foo1 >foo2 2>foo |
| grep "out of range field" foo >/dev/null || echo 1>&2 "BAD: T.overflow \$400000" |
| |
| rm -rf /tmp/awktestfoo* |
| $awk 'BEGIN { for (i=1; i <= 1000; i++) print i >("/tmp/awktestfoo" i) }' |
| ls /tmp/awktestfoo* | grep '1000' >/dev/null || echo 1>&2 "BAD: T.overflow openfiles" |