From: LoRd_MuldeR Date: Sun, 15 Oct 2023 14:55:43 +0000 (+0200) Subject: tool_cb_wrt: fix write output for very old Windows versions X-Git-Tag: curl-8_5_0~242 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b1b755280366b241ff60401e6c043803fd487ad5;p=thirdparty%2Fcurl.git tool_cb_wrt: fix write output for very old Windows versions - Pass missing parameter for 'lpNumberOfCharsWritten' to WriteConsoleW() function. Apparently this parameter was *not* optional on older Windows versions. Issue observed on Windows XP SP2. Issue not observed on Windows 7 SP1. So at some point between those two Microsoft changed the behavior. Prior to this change, on those versions if parameter is NULL then the function call fails with error ERROR_INVALID_ACCESS. Regression since af3f4e41. Ref: https://github.com/MicrosoftDocs/Console-Docs/issues/299 Fixes https://github.com/curl/curl/issues/12131 Closes https://github.com/curl/curl/pull/12130 --- diff --git a/src/tool_cb_wrt.c b/src/tool_cb_wrt.c index b7838664e9..645a3cff8b 100644 --- a/src/tool_cb_wrt.c +++ b/src/tool_cb_wrt.c @@ -237,7 +237,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) if(isatty(fileno(outs->stream)) && GetConsoleScreenBufferInfo((HANDLE)fhnd, &console_info)) { wchar_t *wc_buf; - DWORD wc_len; + DWORD wc_len, chars_written; unsigned char *rbuf = (unsigned char *)buffer; DWORD rlen = (DWORD)bytes; @@ -292,7 +292,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) (HANDLE) fhnd, prefix, prefix[1] ? 2 : 1, - NULL, + &chars_written, NULL)) { return CURL_WRITEFUNC_ERROR; } @@ -351,7 +351,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) (HANDLE) fhnd, wc_buf, wc_len, - NULL, + &chars_written, NULL)) { free(wc_buf); return CURL_WRITEFUNC_ERROR;