From: Richard M. Stallman Date: Fri, 15 Aug 1997 05:07:01 +0000 (+0000) Subject: (main): Update re_max_failures so regex.c won't overflow X-Git-Tag: emacs-20.1~594 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6c2935e99fd15a0c10a4a648a09a499076e031c1;p=emacs.git (main): Update re_max_failures so regex.c won't overflow the stack, except when dumping. --- diff --git a/src/emacs.c b/src/emacs.c index 59be6c7797b..366f7dadaa9 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -579,12 +579,19 @@ main (argc, argv, envp) #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 @@ main (argc, argv, envp) 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;