Mercurial > emacs
changeset 19354:85ac99b8b5c8
(main): Update re_max_failures so regex.c won't overflow
the stack, except when dumping.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 15 Aug 1997 05:07:01 +0000 |
parents | 885b89f866b4 |
children | 269fc135665c |
files | src/emacs.c |
diffstat | 1 files changed, 15 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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;