Mercurial > hg > octave-nkf > gnulib-hg
changeset 10275:4c08c1b6678e
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 <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Wed, 16 Jul 2008 16:28:13 -0600 |
parents | d6a92bbabe6c |
children | adfc5a204195 |
files | ChangeLog modules/c-stack-tests tests/test-c-stack.c tests/test-c-stack2.sh |
diffstat | 4 files changed, 54 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,18 @@ +2008-07-16 Eric Blake <ebb9@byu.net> + + 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 <bruno@clisp.org> * m4/libsigsegv.m4: Remove unneeded AC_PREREQ. Reported by Eric Blake. 2008-07-14 Sam Steingold <sds@gnu.org> - Bruno Haible <bruno@clisp.org> + Bruno Haible <bruno@clisp.org> New module libsigsegv. * modules/libsigsegv: New file.
--- 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 @@ 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
--- 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 @@ #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; }
new file mode 100755 --- /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