1 echo T.overflow: test some overflow conditions 2 3 awk=${awk-../a.out} 4 5 $awk 'BEGIN { 6 for (i = 0; i < 1000; i++) printf("abcdefghijklmnopqsrtuvwxyz") 7 printf("\n") 8 exit 9 }' >foo1 10 $awk '{print}' foo1 >foo2 11 cmp -s foo1 foo2 || echo 'BAD: T.overflow record 1' 12 13 echo 'abcdefghijklmnopqsrtuvwxyz' >foo1 14 echo hello | $awk ' 15 { for (i = 1; i < 500; i++) s = s "abcdefghijklmnopqsrtuvwxyz " 16 $0 = s 17 print $1 18 }' >foo2 19 cmp -s foo1 foo2 || echo 'BAD: T.overflow abcdef' 20 21 # default input record 3072, fields 200: 22 $awk ' 23 BEGIN { 24 for (j = 0; j < 2; j++) { 25 for (i = 0; i < 500; i++) 26 printf(" 123456789") 27 printf("\n"); 28 } 29 } ' >foo1 30 $awk '{$1 = " 123456789"; print}' foo1 >foo2 31 cmp -s foo1 foo2 || echo 'BAD: T.overflow -mr -mf set $1' 32 33 $awk ' 34 BEGIN { 35 for (j = 0; j < 2; j++) { 36 for (i = 0; i < 500; i++) 37 printf(" 123456789") 38 printf("\n"); 39 } 40 } ' >foo 41 $awk '{print NF}' foo >foo1 42 echo '500 43 500' >foo2 44 cmp -s foo1 foo2 || echo 'BAD: T.overflow -mr -mf NF' 45 46 rm -f core 47 # this should not drop core 48 $awk 'BEGIN { 49 for (i = 1; i < 1000; i++) s = s "a-z" 50 if ("x" ~ "[" s "]") 51 print "ugh" 52 }' >foo 2>foo 53 test -r core && echo 1>&2 "BAD: T.overflow too long char class dropped core" 54 55 echo 4000004 >foo1 56 $awk ' 57 BEGIN { 58 x1 = sprintf("%1000000s\n", "hello") 59 x2 = sprintf("%-1000000s\n", "world") 60 x3 = sprintf("%1000000.1000000s\n", "goodbye") 61 x4 = sprintf("%-1000000.1000000s\n", "goodbye") 62 print length(x1 x2 x3 x4) 63 }' >foo2 64 cmp -s foo1 foo2 || echo 'BAD: T.overflow huge sprintfs' 65 66 echo 0 >foo1 67 $awk ' 68 BEGIN { 69 for (i = 0; i < 100000; i++) 70 x[i] = i 71 for (i in x) 72 delete x[i] 73 n = 0 74 for (i in x) 75 n++ 76 print n 77 }' >foo2 78 cmp -s foo1 foo2 || echo 'BAD: T.overflow big array' 79 80 echo x >foo1 81 $awk '{print $40000000000000}' <foo1 >foo2 2>foo 82 grep "out of range field" foo >/dev/null || echo 1>&2 "BAD: T.overflow \$400000" 83 84 rm -rf /tmp/awktestfoo* 85 $awk 'BEGIN { for (i=1; i <= 1000; i++) print i >("/tmp/awktestfoo" i) }' 86 ls /tmp/awktestfoo* | grep '1000' >/dev/null || echo 1>&2 "BAD: T.overflow openfiles" 87 rm -rf /tmp/awktestfoo* 88 exit 0 89