bug-gnulib
[Top][All Lists]
Advanced

[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.  */






reply via email to

[Prev in Thread] Current Thread [Next in Thread]