changeset 37249:456b371f2cef

regex: suppress core dumps from detection code * m4/regex.m4 (gl_REGEX): Catch the SIGABRT and convert to SIGTERM to suppress core dumps that may well occur on glibc systems. These core dumps might not be cleaned up automatically, or could trigger some system core dump handling logic.
author Pádraig Brady <P@draigBrady.com>
date Wed, 04 Dec 2013 12:11:40 +0000
parents 2bb08acbb90a
children c2705b0dd79f
files ChangeLog m4/regex.m4
diffstat 2 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Dec 03 13:53:03 2013 +0000
+++ b/ChangeLog	Wed Dec 04 12:11:40 2013 +0000
@@ -1,3 +1,11 @@
+2013-12-04  Pádraig Brady <P@draigBrady.com>
+
+	regex: suppress core dumps from detection code
+	* m4/regex.m4 (gl_REGEX): Catch the SIGABRT and convert to SIGTERM
+	to suppress core dumps that may well occur on glibc systems.
+	These core dumps might not be cleaned up automatically, or could
+	trigger some system core dump handling logic.
+
 2013-12-03  Pádraig Brady <P@draigBrady.com>
 
 	md5, sha1, sha256, sha512: support mandating use of openssl
--- a/m4/regex.m4	Tue Dec 03 13:53:03 2013 +0000
+++ b/m4/regex.m4	Wed Dec 04 12:11:40 2013 +0000
@@ -38,13 +38,20 @@
             #include <locale.h>
             #include <limits.h>
             #include <string.h>
-            #if HAVE_DECL_ALARM
+
+            #if defined M_CHECK_ACTION || HAVE_DECL_ALARM
+            # include <signal.h>
             # include <unistd.h>
-            # include <signal.h>
             #endif
+
             #if HAVE_MALLOC_H
             # include <malloc.h>
             #endif
+
+            #ifdef M_CHECK_ACTION
+            /* Exit with distinguishable exit code.  */
+            static void sigabrt_no_core (int sig) { raise (SIGTERM); }
+            #endif
           ]],
           [[int result = 0;
             static struct re_pattern_buffer regex;
@@ -61,7 +68,8 @@
             alarm (2);
 #endif
 #ifdef M_CHECK_ACTION
-            mallopt(M_CHECK_ACTION, 2);
+            signal (SIGABRT, sigabrt_no_core);
+            mallopt (M_CHECK_ACTION, 2);
 #endif
 
             if (setlocale (LC_ALL, "en_US.UTF-8"))