From: Eli Zaretskii Date: Sun, 7 Sep 2014 17:04:19 +0000 (+0300) Subject: Fix the MS-Windows build broken by SAFE_ALLOCA changes. X-Git-Tag: emacs-25.0.90~2635^2~679^2~337 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=970d21e8e6aa7e5bafd3f025f66d694b5ae06ba5;p=emacs.git Fix the MS-Windows build broken by SAFE_ALLOCA changes. src/callproc.c (child_setup) [WINDOWSNT]: Don't call exec_failed if 'alloca' gets passed arguments larger than MAX_ALLOCA. src/font.c (MAX): Define if not defined elsewhere. --- diff --git a/src/ChangeLog b/src/ChangeLog index e9c3fe0dea4..acb8eed4722 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2014-09-07 Eli Zaretskii + + * callproc.c (child_setup) [WINDOWSNT]: Don't call exec_failed if + 'alloca' gets passed arguments larger than MAX_ALLOCA. + + * font.c (MAX): Define if not defined elsewhere. + 2014-09-07 Paul Eggert * keyboard.c (read_decoded_event_from_main_queue): Reinstitute alloca diff --git a/src/callproc.c b/src/callproc.c index 0636571b26c..271743021b6 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -1213,8 +1213,13 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp, on that. */ pwd_var = xmalloc (i + 5); #else + /* WINDOWSNT doesn't define exec_failed, and doesn't need this + test, since a directory name cannot be longer than 260 + characters, i.e. 260 * 4 = 1040 UTF-8 bytes. */ +#ifndef WINDOWSNT if (MAX_ALLOCA - 5 < i) exec_failed (new_argv[0], ENOMEM); +#endif pwd_var = alloca (i + 5); #endif temp = pwd_var + 4; @@ -1281,8 +1286,10 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp, } /* new_length + 2 to include PWD and terminating 0. */ +#ifndef WINDOWSNT if (MAX_ALLOCA / sizeof *env - 2 < new_length) exec_failed (new_argv[0], ENOMEM); +#endif env = new_env = alloca ((new_length + 2) * sizeof *env); /* If we have a PWD envvar, pass one down, but with corrected value. */ @@ -1291,9 +1298,14 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp, if (STRINGP (display)) { + char *vdata; + + /* WINDOWSNT doesn't have $DISPLAY. */ +#ifndef WINDOWSNT if (MAX_ALLOCA - sizeof "DISPLAY=" < SBYTES (display)) exec_failed (new_argv[0], ENOMEM); - char *vdata = alloca (sizeof "DISPLAY=" + SBYTES (display)); +#endif + vdata = alloca (sizeof "DISPLAY=" + SBYTES (display)); strcpy (vdata, "DISPLAY="); strcat (vdata, SSDATA (display)); new_env = add_env (env, new_env, vdata); diff --git a/src/font.c b/src/font.c index 90a5c6a2f88..46fc51bd5ad 100644 --- a/src/font.c +++ b/src/font.c @@ -41,6 +41,10 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ +#ifndef MAX +# define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + Lisp_Object Qopentype; /* Important character set strings. */