summaryrefslogtreecommitdiff
path: root/test-skeleton.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2013-12-29 23:13:20 +0000
committerMike Frysinger <vapier@gentoo.org>2014-02-08 06:58:43 -0500
commitc5bb8e2399f55c09a98c66936940ba744b5841da (patch)
tree32453369908787a9d47008667138e85225bf339f /test-skeleton.c
parent10444e425e539ec12e42415756b0a874413ce94a (diff)
downloadglibc-c5bb8e2399f55c09a98c66936940ba744b5841da.tar.gz
tests: unify fortification handler logic
We have multiple tests that copy & paste the same logic for disabling the fortification output. Let's unify this in the test-skeleton instead. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'test-skeleton.c')
-rw-r--r--test-skeleton.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/test-skeleton.c b/test-skeleton.c
index b08cfb596c..d7d2f750b7 100644
--- a/test-skeleton.c
+++ b/test-skeleton.c
@@ -18,8 +18,10 @@
<http://www.gnu.org/licenses/>. */
#include <errno.h>
+#include <fcntl.h>
#include <getopt.h>
#include <malloc.h>
+#include <paths.h>
#include <search.h>
#include <signal.h>
#include <stdio.h>
@@ -194,6 +196,32 @@ signal_handler (int sig __attribute__ ((unused)))
exit (1);
}
+/* Set fortification error handler. Used when tests want to verify that bad
+ code is caught by the library. */
+static void
+__attribute__ ((unused))
+set_fortify_handler (void (*handler) (int sig))
+{
+ struct sigaction sa;
+
+ sa.sa_handler = handler;
+ sa.sa_flags = 0;
+ sigemptyset (&sa.sa_mask);
+
+ sigaction (SIGABRT, &sa, NULL);
+
+ /* Avoid all the buffer overflow messages on stderr. */
+ int fd = open (_PATH_DEVNULL, O_WRONLY);
+ if (fd == -1)
+ close (STDERR_FILENO);
+ else
+ {
+ dup2 (fd, STDERR_FILENO);
+ close (fd);
+ }
+ setenv ("LIBC_FATAL_STDERR_", "1", 1);
+}
+
/* We provide the entry point here. */
int
main (int argc, char *argv[])