# HG changeset patch # User Richard M. Stallman # Date 871621621 0 # Node ID 85ac99b8b5c8eb4d9b3c0f6bbdec40afff1ed833 # Parent 885b89f866b4138c737695b70d39047ea94619a1 (main): Update re_max_failures so regex.c won't overflow the stack, except when dumping. diff -r 885b89f866b4 -r 85ac99b8b5c8 src/emacs.c --- a/src/emacs.c Fri Aug 15 03:29:41 1997 +0000 +++ b/src/emacs.c Fri Aug 15 05:07:01 1997 +0000 @@ -579,12 +579,19 @@ #endif /* VMS */ #if defined (HAVE_SETRLIMIT) && defined (RLIMIT_STACK) - /* Extend the stack space available. */ - if (!getrlimit (RLIMIT_STACK, &rlim)) + /* Extend the stack space available. + Don't do that if dumping, since some systems (e.g. DJGPP) + might define a smaller stack limit at that time. */ + if (1 +#ifndef CANNOT_DUMP + && (!noninteractive || initialized) +#endif + && !getrlimit (RLIMIT_STACK, &rlim)) { long newlim; + extern int re_max_failures; /* Approximate the amount regex.c needs, plus some more. */ - newlim = 800000 * sizeof (char *); + newlim = re_max_failures * 2 * 20 * sizeof (char *); #ifdef __NetBSD__ /* NetBSD (at least NetBSD 1.2G and former) has a bug in its stack allocation routine for new process that the allocation @@ -593,7 +600,11 @@ newlim = (newlim + getpagesize () - 1) / getpagesize () * getpagesize(); #endif if (newlim > rlim.rlim_max) - newlim = rlim.rlim_max; + { + newlim = rlim.rlim_max; + /* Don't let regex.c overflow the stack. */ + re_max_failures = newlim / (2 * 20 * sizeof (char *)); + } if (rlim.rlim_cur < newlim) rlim.rlim_cur = newlim;