* callproc.c (child_setup): Don't assume strlen fits in int.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 28 Jul 2011 20:29:09 +0000 (13:29 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 28 Jul 2011 20:29:09 +0000 (13:29 -0700)
src/ChangeLog
src/callproc.c

index ff5dfc0..9b9a968 100644 (file)
@@ -1,5 +1,7 @@
 2011-07-28  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * callproc.c (child_setup): Don't assume strlen fits in int.
+
        * buffer.c: Memory overflow fixes.
        (overlays_at, overlays_in, record_overlay_string, overlay_strings):
        Don't update size of array until after memory allocation succeeds,
index ad3eddb..13d1232 100644 (file)
@@ -1145,9 +1145,11 @@ child_setup (int in, int out, int err, register char **new_argv, int set_pgrp, L
      cleaned up in the usual way. */
   {
     register char *temp;
-    register int i;
+    register ptrdiff_t i;
 
     i = SBYTES (current_dir);
+    if (min (PTRDIFF_MAX, SIZE_MAX) - 6 < i)
+      memory_full (SIZE_MAX);
 #ifdef MSDOS
     /* MSDOS must have all environment variables malloc'ed, because
        low-level libc functions that launch subsidiary processes rely