From 1eb850a182e6e5aa66d17d314b394e2ded30e2b5 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 16 Jul 2008 16:28:13 -0600 Subject: [PATCH] c-stack: Expose false positives when not using libsigsegv. * modules/c-stack-tests (Files): Expand test. * tests/test-c-stack.c (main): Add means to conditionally trigger non-overflow SIGSEGV. * tests/test-c-stack2.sh: New file. Signed-off-by: Eric Blake --- ChangeLog | 10 +++++++++- modules/c-stack-tests | 5 +++-- tests/test-c-stack.c | 19 +++++++++++++------ tests/test-c-stack2.sh | 29 +++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 9 deletions(-) create mode 100755 tests/test-c-stack2.sh diff --git a/ChangeLog b/ChangeLog index 91c45cee2..0772f2d80 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,18 @@ +2008-07-16 Eric Blake + + c-stack: Expose false positives when not using libsigsegv. + * modules/c-stack-tests (Files): Expand test. + * tests/test-c-stack.c (main): Add means to conditionally trigger + non-overflow SIGSEGV. + * tests/test-c-stack2.sh: New file. + 2008-07-14 Bruno Haible * m4/libsigsegv.m4: Remove unneeded AC_PREREQ. Reported by Eric Blake. 2008-07-14 Sam Steingold - Bruno Haible + Bruno Haible New module libsigsegv. * modules/libsigsegv: New file. diff --git a/modules/c-stack-tests b/modules/c-stack-tests index 291f58d5e..5d3bc5807 100644 --- a/modules/c-stack-tests +++ b/modules/c-stack-tests @@ -1,6 +1,7 @@ Files: tests/test-c-stack.c tests/test-c-stack.sh +tests/test-c-stack2.sh Depends-on: exitfail @@ -8,8 +9,8 @@ exitfail configure.ac: Makefile.am: -TESTS += test-c-stack.sh +TESTS += test-c-stack.sh test-c-stack2.sh TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' check_PROGRAMS += test-c-stack test_c_stack_LDADD = $(LDADD) @LIBINTL@ -MOSTLYCLEANFILES += t-c-stack.tmp +MOSTLYCLEANFILES += t-c-stack.tmp t-c-stack2.tmp diff --git a/tests/test-c-stack.c b/tests/test-c-stack.c index 13c1a1256..bcf72adbd 100644 --- a/tests/test-c-stack.c +++ b/tests/test-c-stack.c @@ -29,11 +29,11 @@ do \ { \ if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ } \ while (0) @@ -62,7 +62,14 @@ main (int argc, char **argv) #endif if (c_stack_action (0) == 0) - return recurse ("\1"); + { + if (1 < argc) + { + exit_failure = 77; + ++*argv[argc]; /* Intentionally dereference NULL. */ + } + return recurse ("\1"); + } perror ("c_stack_action"); return 77; } diff --git a/tests/test-c-stack2.sh b/tests/test-c-stack2.sh new file mode 100755 index 000000000..e55ff172d --- /dev/null +++ b/tests/test-c-stack2.sh @@ -0,0 +1,29 @@ +#!/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. +(./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 + echo 'cannot distinguish stack overflow from crash' >&2 + else + cat t-c-stack2.tmp >&2 + fi + (exit 77); 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 -- 2.11.0