From 6012121865d53e1da793cb7f2a50d7bef5b0a3a6 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sun, 17 Aug 2003 00:09:27 +0000
Subject: [PATCH] (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Limit stack size to
 1MB, so as not to render systems with no stack size limit (e.g., linux-2.2.x)
 unusable.  Suggestion and code from Bruno Haible. Include <unistd.h>.  On
 some systems, it is required for the definition of _SC_PAGESIZE.

---
 m4/c-stack.m4 | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/m4/c-stack.m4 b/m4/c-stack.m4
index 81c873bed3..8049d96bdf 100644
--- a/m4/c-stack.m4
+++ b/m4/c-stack.m4
@@ -1,6 +1,6 @@
 # Check prerequisites for compiling lib/c-stack.c.
 
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -22,13 +22,20 @@
 AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC],
   [# for STACK_DIRECTION
    AC_REQUIRE([AC_FUNC_ALLOCA])
+   AC_CHECK_FUNCS(setrlimit)
 
    AC_CACHE_CHECK([for working C stack overflow detection],
      ac_cv_sys_xsi_stack_overflow_heuristic,
      [AC_TRY_RUN(
 	[
+	 #include <unistd.h>
 	 #include <signal.h>
 	 #include <ucontext.h>
+	 #if HAVE_SETRLIMIT
+	 # include <sys/types.h>
+	 # include <sys/time.h>
+	 # include <sys/resource.h>
+	 #endif
 
 	 static union
 	 {
@@ -101,6 +108,16 @@ AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC],
 	 int
 	 main (void)
 	 {
+	   #if HAVE_SETRLIMIT && defined RLIMIT_STACK
+	   /* Before starting the endless recursion, try to be friendly
+	      to the user's machine.  On some Linux 2.2.x systems, there
+	      is no stack limit for user processes at all.  We don't want
+	      to kill such systems.  */
+	   struct rlimit rl;
+	   rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */
+	   setrlimit (RLIMIT_STACK, &rl);
+	   #endif
+
 	   c_stack_action ();
 	   return recurse ("\1");
 	 }
-- 
2.39.5