From 36e24782f87c25d13b4c918c66cd4affaab8df79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20F=C3=A6r=C3=B8y?= Date: Thu, 20 Dec 2018 13:02:22 +0100 Subject: [PATCH] Remember to set `reached_eof` when our handles are reporting errors. This patch adds some missing calls to set `reached_eof` of our handles when various error conditions happens or when we close our handle (which happens at `process_terminate()`. See: https://bugs.torproject.org/28179 --- src/lib/process/process_win32.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/process/process_win32.c b/src/lib/process/process_win32.c index 71dd4001c8..358765f790 100644 --- a/src/lib/process/process_win32.c +++ b/src/lib/process/process_win32.c @@ -367,6 +367,7 @@ process_win32_write(struct process_t *process, buf_t *buffer) if (! ret) { log_warn(LD_PROCESS, "WriteFileEx() failed: %s", format_win32_error(GetLastError())); + win32_process->stdin_handle.reached_eof = true; return 0; } @@ -749,6 +750,7 @@ process_win32_cleanup_handle(process_win32_handle_t *handle) if (handle->pipe != INVALID_HANDLE_VALUE) { CloseHandle(handle->pipe); handle->pipe = INVALID_HANDLE_VALUE; + handle->reached_eof = true; } } @@ -930,6 +932,7 @@ process_win32_read_from_handle(process_win32_handle_t *handle, if (! ret) { log_warn(LD_PROCESS, "ReadFileEx() failed: %s", format_win32_error(GetLastError())); + handle->reached_eof = true; return bytes_available; }