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