From: Paul Eggert Date: Sat, 22 Jun 2013 16:43:39 +0000 (-0700) Subject: * process.c (wait_reading_process_output): Avoid int overflow X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~2002 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f86852b4a3c34213f93fc5de5cb1632b49962023;p=emacs.git * process.c (wait_reading_process_output): Avoid int overflow when reading more than 2 GiB total from a process. --- diff --git a/src/ChangeLog b/src/ChangeLog index bdb8baf65d8..36709eb5107 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-06-22 Paul Eggert + + * process.c (wait_reading_process_output): Avoid int overflow + when reading more than 2 GiB total from a process. + 2013-06-21 Paul Eggert * process.c (create_process): Handle a couple more cases, diff --git a/src/process.c b/src/process.c index c61a22c4beb..0631cb732bf 100644 --- a/src/process.c +++ b/src/process.c @@ -4430,7 +4430,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, && ! EQ (wait_proc->status, Qrun) && ! EQ (wait_proc->status, Qconnect)) { - int nread, total_nread = 0; + bool read_some_bytes = 0; clear_waiting_for_input (); XSETPROCESS (proc, wait_proc); @@ -4438,16 +4438,13 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, /* Read data from the process, until we exhaust it. */ while (wait_proc->infd >= 0) { - nread = read_process_output (proc, wait_proc->infd); + int nread = read_process_output (proc, wait_proc->infd); if (nread == 0) break; if (nread > 0) - { - total_nread += nread; - got_some_input = 1; - } + got_some_input = read_some_bytes = 1; else if (nread == -1 && (errno == EIO || errno == EAGAIN)) break; #ifdef EWOULDBLOCK @@ -4455,7 +4452,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, break; #endif } - if (total_nread > 0 && do_display) + if (read_some_bytes && do_display) redisplay_preserve_echo_area (10); break;