From f5bc578f4cdfdc6c708211dfc2962a0e9d79352d Mon Sep 17 00:00:00 2001 From: Jay Satiro Date: Tue, 26 Mar 2019 03:31:30 -0400 Subject: tool_cb_wrt: fix writing to Windows null device NUL - Improve console detection. Prior to this change WriteConsole could be called to write to a handle that may not be a console, which would cause an error. This issue is limited to character devices that are not also consoles such as the null device NUL. Bug: https://github.com/curl/curl/issues/3175#issuecomment-439068724 Reported-by: Gisle Vanem --- src/tool_cb_wrt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/tool_cb_wrt.c b/src/tool_cb_wrt.c index 195d6e79c..1944f16c2 100644 --- a/src/tool_cb_wrt.c +++ b/src/tool_cb_wrt.c @@ -79,6 +79,9 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) struct OperationConfig *config = outs->config; size_t bytes = sz * nmemb; bool is_tty = config->global->isatty; +#ifdef WIN32 + CONSOLE_SCREEN_BUFFER_INFO console_info; +#endif /* * Once that libcurl has called back tool_write_cb() the returned value @@ -156,7 +159,9 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) } #ifdef _WIN32 - if(isatty(fileno(outs->stream))) { + if(isatty(fileno(outs->stream)) && + GetConsoleScreenBufferInfo( + (HANDLE)_get_osfhandle(fileno(outs->stream)), &console_info)) { DWORD in_len = (DWORD)(sz * nmemb); wchar_t* wc_buf; DWORD wc_len; -- cgit v1.2.1