Home | History | Annotate | Line # | Download | only in testdir
      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