diff options
Diffstat (limited to '')
-rwxr-xr-x | src/grep/gnulib-tests/test-c-stack2.sh | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/grep/gnulib-tests/test-c-stack2.sh b/src/grep/gnulib-tests/test-c-stack2.sh new file mode 100755 index 0000000..7f03593 --- /dev/null +++ b/src/grep/gnulib-tests/test-c-stack2.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="t-c-stack2.tmp" + +# Sanitize exit status within a subshell, since some shells fail to +# redirect stderr on their message about death due to signal. +(${CHECKER} ./test-c-stack${EXEEXT} 1; exit $?) 2> t-c-stack2.tmp + +case $? in + 77) if grep 'stack overflow' t-c-stack2.tmp >/dev/null ; then + if test -z "$LIBSIGSEGV"; then + echo 'cannot tell stack overflow from crash; consider installing libsigsegv' >&2 + exit 77 + else + echo 'cannot tell stack overflow from crash, in spite of libsigsegv' >&2 + exit 1 + fi + else + cat t-c-stack2.tmp >&2 + exit 77 + fi + ;; + 1) + # Dereferencing NULL exits the program with status 1, + # so this test doesn't check the c-stack testing harness like it should. + # https://lists.gnu.org/r/grep-devel/2020-09/msg00034.html + cat t-c-stack2.tmp >&2 + echo 'skipping test (perhaps gcc -fsanitize=undefined is in use?)' + exit 77;; + 0) (exit 1); exit 1 ;; +esac +if grep 'program error' t-c-stack2.tmp >/dev/null ; then + : +else + (exit 1); exit 1 +fi + +rm -fr $tmpfiles + +exit 0 |