From f86852b4a3c34213f93fc5de5cb1632b49962023 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 22 Jun 2013 09:43:39 -0700 Subject: [PATCH] * process.c (wait_reading_process_output): Avoid int overflow when reading more than 2 GiB total from a process. --- src/ChangeLog | 5 +++++ src/process.c | 11 ++++------- 2 files changed, 9 insertions(+), 7 deletions(-) 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; -- 2.39.5