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