[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
*printf-posix: Avoid crash in a configure test
From: |
Bruno Haible |
Subject: |
*printf-posix: Avoid crash in a configure test |
Date: |
Tue, 20 Feb 2024 12:07:03 +0100 |
After configuring my dev environment to leave core dumps in /var/crash,
I see that a 'configure' run in a testdir of all of gnulib produces one
core dump, and I get a UI notification of it. The cause is the test program
that tests whether *printf supports the %n directive: it triggers an abort(),
which produces a core dump:
$ gcc -O2 -g conftest.c && ./a.out
*** %n in writable segment detected ***
Aborted (core dumped)
This patch fixes it.
2024-02-20 Bruno Haible <bruno@clisp.org>
*printf-posix: Avoid crash in a configure test.
* m4/printf.m4 (gl_PRINTF_DIRECTIVE_N): In the test program, catch the
SIGABRT signal, so that the program does not dump core.
diff --git a/m4/printf.m4 b/m4/printf.m4
index bb67d59409..05bf7fe1df 100644
--- a/m4/printf.m4
+++ b/m4/printf.m4
@@ -1,4 +1,4 @@
-# printf.m4 serial 89
+# printf.m4 serial 90
dnl Copyright (C) 2003, 2007-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -890,6 +890,7 @@ AC_DEFUN([gl_PRINTF_DIRECTIVE_N]
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -907,6 +908,12 @@ AC_DEFUN([gl_PRINTF_DIRECTIVE_N]
exit (1);
}
#endif
+static void
+abort_handler (int sig)
+{
+ (void) sig;
+ _exit (1);
+}
static char fmtstring[10];
static char buf[100];
int main ()
@@ -915,6 +922,7 @@ AC_DEFUN([gl_PRINTF_DIRECTIVE_N]
#ifdef _MSC_VER
_set_invalid_parameter_handler (invalid_parameter_handler);
#endif
+ signal (SIGABRT, abort_handler);
/* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
support %n in format strings in read-only memory but not in writable
memory. */
- *printf-posix: Avoid crash in a configure test,
Bruno Haible <=