Commit f86852b4 authored by Paul Eggert's avatar Paul Eggert
Browse files

* process.c (wait_reading_process_output): Avoid int overflow

when reading more than 2 GiB total from a process.
parent 12adebe9
2013-06-22 Paul Eggert <eggert@cs.ucla.edu>
* process.c (wait_reading_process_output): Avoid int overflow
when reading more than 2 GiB total from a process.
2013-06-21 Paul Eggert <eggert@cs.ucla.edu> 2013-06-21 Paul Eggert <eggert@cs.ucla.edu>
* process.c (create_process): Handle a couple more cases, * process.c (create_process): Handle a couple more cases,
......
...@@ -4430,7 +4430,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, ...@@ -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, Qrun)
&& ! EQ (wait_proc->status, Qconnect)) && ! EQ (wait_proc->status, Qconnect))
{ {
int nread, total_nread = 0; bool read_some_bytes = 0;
clear_waiting_for_input (); clear_waiting_for_input ();
XSETPROCESS (proc, wait_proc); XSETPROCESS (proc, wait_proc);
...@@ -4438,16 +4438,13 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, ...@@ -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. */ /* Read data from the process, until we exhaust it. */
while (wait_proc->infd >= 0) 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) if (nread == 0)
break; break;
if (nread > 0) if (nread > 0)
{ got_some_input = read_some_bytes = 1;
total_nread += nread;
got_some_input = 1;
}
else if (nread == -1 && (errno == EIO || errno == EAGAIN)) else if (nread == -1 && (errno == EIO || errno == EAGAIN))
break; break;
#ifdef EWOULDBLOCK #ifdef EWOULDBLOCK
...@@ -4455,7 +4452,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, ...@@ -4455,7 +4452,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
break; break;
#endif #endif
} }
if (total_nread > 0 && do_display) if (read_some_bytes && do_display)
redisplay_preserve_echo_area (10); redisplay_preserve_echo_area (10);
break; break;
......
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