#!/bin/sh
# This file is part of the GNU m4 testsuite
# Copyright (C) 2000, 2003, 2007, 2008 Free Software Foundation, Inc.
#
# This file is part of GNU M4.
#
# GNU M4 is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GNU M4 is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Script to verify that stack overflow is diagnosed properly when
# there is infinite macro call nesting, provided the OS supports it.

m4="$1"

# Skip this test if -L defaults to 1024 instead of 0, as that is our
# indicator that the OS does not support stack overflow detection.
("$m4" --help | grep 'nesting.*\[0\]') >/dev/null 2>&1 \
  || {
       echo "$0: skipping test, no stack overflow support detected in $m4"
       exit 77
     }

# On some systems the ulimit command is available in ksh or bash but not sh
(exec 2>/dev/null; ulimit -Ss 300) || {
  for altshell in bash bsh ksh zsh ; do
    if (exec >/dev/null 2>&1; $altshell -c 'ulimit -Ss 300') && test -z "$2"
    then
      echo "Using $altshell because it supports ulimit"
      exec $altshell "$0" "$@" running-with-$altshell
      exit 1
    fi
  done
}

tmpdir=
trap 'st=$?; rm -rf "$tmpdir" && exit $st' 0
trap '(exit $?); exit $?' 1 2 3 15

# Create a temporary subdirectory $tmpdir in $TMPDIR (default /tmp).
# Use mktemp if possible; otherwise fall back on mkdir,
# with $RANDOM to make collisions less likely.
: ${TMPDIR=/tmp}
{
  tmpdir=`
    (umask 077 && mktemp -d "$TMPDIR/m4stk-XXXXXX") 2>/dev/null
  ` &&
  test -n "$tmpdir" && test -d "$tmpdir"
} || {
  tmpdir=$TMPDIR/m4stk-$$-$RANDOM
  (umask 077 && mkdir "$tmpdir")
} || exit $?
tmpfile="$tmpdir"/m4.out

# Limit the stack size if the shell we are running permits it
if (exec 2>/dev/null; ulimit -Ss 300)
then
  ulimit -Ss 300
  echo "Stack soft limit set to `ulimit -s`K";
else
  echo "Can't reset stack limit - this may take a while..."
fi

# Induce stack overflow.
echo 'define(a,a(a))a' | "$m4" > "$tmpfile" 2>&1
result=$?

exitcode=1
if test $result -eq 0 ; then
  echo "Failure - $m4 did not abort"
else
  # See if stack overflow was diagnosed.
  case `cat "$tmpfile"` in
    *stack\ overflow*)
      case `echo "$tmpdir"/*` in
	$tmpfile)
	   echo "Pass"
	   exitcode=0 ;;
	*) echo "Failure - $m4 created unexpected core dump"
	   ls -l "$tmpdir" ;;
      esac ;;
    *)	echo "Failure - $m4 aborted unexpectedly";
	;;
    esac
fi

test $exitcode = 0 ||
    { echo "Output from $m4:"; cat $tmpfile; }

exit $exitcode
