diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/callproc.c | 14 | ||||
| -rw-r--r-- | src/font.c | 4 |
3 files changed, 24 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index e9c3fe0dea4..acb8eed4722 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2014-09-07 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * callproc.c (child_setup) [WINDOWSNT]: Don't call exec_failed if | ||
| 4 | 'alloca' gets passed arguments larger than MAX_ALLOCA. | ||
| 5 | |||
| 6 | * font.c (MAX): Define if not defined elsewhere. | ||
| 7 | |||
| 1 | 2014-09-07 Paul Eggert <eggert@cs.ucla.edu> | 8 | 2014-09-07 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 9 | ||
| 3 | * keyboard.c (read_decoded_event_from_main_queue): Reinstitute alloca | 10 | * 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, | |||
| 1213 | on that. */ | 1213 | on that. */ |
| 1214 | pwd_var = xmalloc (i + 5); | 1214 | pwd_var = xmalloc (i + 5); |
| 1215 | #else | 1215 | #else |
| 1216 | /* WINDOWSNT doesn't define exec_failed, and doesn't need this | ||
| 1217 | test, since a directory name cannot be longer than 260 | ||
| 1218 | characters, i.e. 260 * 4 = 1040 UTF-8 bytes. */ | ||
| 1219 | #ifndef WINDOWSNT | ||
| 1216 | if (MAX_ALLOCA - 5 < i) | 1220 | if (MAX_ALLOCA - 5 < i) |
| 1217 | exec_failed (new_argv[0], ENOMEM); | 1221 | exec_failed (new_argv[0], ENOMEM); |
| 1222 | #endif | ||
| 1218 | pwd_var = alloca (i + 5); | 1223 | pwd_var = alloca (i + 5); |
| 1219 | #endif | 1224 | #endif |
| 1220 | temp = pwd_var + 4; | 1225 | temp = pwd_var + 4; |
| @@ -1281,8 +1286,10 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp, | |||
| 1281 | } | 1286 | } |
| 1282 | 1287 | ||
| 1283 | /* new_length + 2 to include PWD and terminating 0. */ | 1288 | /* new_length + 2 to include PWD and terminating 0. */ |
| 1289 | #ifndef WINDOWSNT | ||
| 1284 | if (MAX_ALLOCA / sizeof *env - 2 < new_length) | 1290 | if (MAX_ALLOCA / sizeof *env - 2 < new_length) |
| 1285 | exec_failed (new_argv[0], ENOMEM); | 1291 | exec_failed (new_argv[0], ENOMEM); |
| 1292 | #endif | ||
| 1286 | env = new_env = alloca ((new_length + 2) * sizeof *env); | 1293 | env = new_env = alloca ((new_length + 2) * sizeof *env); |
| 1287 | /* If we have a PWD envvar, pass one down, | 1294 | /* If we have a PWD envvar, pass one down, |
| 1288 | but with corrected value. */ | 1295 | but with corrected value. */ |
| @@ -1291,9 +1298,14 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp, | |||
| 1291 | 1298 | ||
| 1292 | if (STRINGP (display)) | 1299 | if (STRINGP (display)) |
| 1293 | { | 1300 | { |
| 1301 | char *vdata; | ||
| 1302 | |||
| 1303 | /* WINDOWSNT doesn't have $DISPLAY. */ | ||
| 1304 | #ifndef WINDOWSNT | ||
| 1294 | if (MAX_ALLOCA - sizeof "DISPLAY=" < SBYTES (display)) | 1305 | if (MAX_ALLOCA - sizeof "DISPLAY=" < SBYTES (display)) |
| 1295 | exec_failed (new_argv[0], ENOMEM); | 1306 | exec_failed (new_argv[0], ENOMEM); |
| 1296 | char *vdata = alloca (sizeof "DISPLAY=" + SBYTES (display)); | 1307 | #endif |
| 1308 | vdata = alloca (sizeof "DISPLAY=" + SBYTES (display)); | ||
| 1297 | strcpy (vdata, "DISPLAY="); | 1309 | strcpy (vdata, "DISPLAY="); |
| 1298 | strcat (vdata, SSDATA (display)); | 1310 | strcat (vdata, SSDATA (display)); |
| 1299 | new_env = add_env (env, new_env, vdata); | 1311 | 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 <http://www.gnu.org/licenses/>. */ | |||
| 41 | #include TERM_HEADER | 41 | #include TERM_HEADER |
| 42 | #endif /* HAVE_WINDOW_SYSTEM */ | 42 | #endif /* HAVE_WINDOW_SYSTEM */ |
| 43 | 43 | ||
| 44 | #ifndef MAX | ||
| 45 | # define MAX(a, b) ((a) > (b) ? (a) : (b)) | ||
| 46 | #endif | ||
| 47 | |||
| 44 | Lisp_Object Qopentype; | 48 | Lisp_Object Qopentype; |
| 45 | 49 | ||
| 46 | /* Important character set strings. */ | 50 | /* Important character set strings. */ |