Commit 970d21e8 authored by Eli Zaretskii's avatar Eli Zaretskii

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.
parent 2b95a8ef
2014-09-07 Eli Zaretskii <eliz@gnu.org>
* 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 <eggert@cs.ucla.edu>
* keyboard.c (read_decoded_event_from_main_queue): Reinstitute alloca
......
......@@ -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);
......
......@@ -41,6 +41,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#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. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment