From 6f8fe67ace4346c3c22fb3348d54ba1cfeb59669 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 27 Oct 2005 21:02:01 +0000 Subject: [PATCH] tommink[at]post.pl reported in bug report #1337723 (http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload binary data from stdin on Windows if the data contained control-Z (hex 1a) since that is treated as end-of-file when read in text mode. Gisle Vanem pointed out the fix, and I made both -T and --data-binary take advantage of it. --- CHANGES | 7 +++++++ RELEASE-NOTES | 3 ++- src/main.c | 10 +++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index da9f357..77d3eac 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,13 @@ Daniel (27 October 2005) +- tommink[at]post.pl reported in bug report #1337723 + (http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload + binary data from stdin on Windows if the data contained control-Z (hex 1a) + since that is treated as end-of-file when read in text mode. Gisle Vanem + pointed out the fix, and I made both -T and --data-binary take advantage of + it. + - Jaz Fresh pointed out that if you used "-r [number]" as was wrongly described in the man page, curl would send an invalid HTTP Range: header. The correct way would be to use "-r [number]-" or even "-r -[number]". Starting now, diff --git a/RELEASE-NOTES b/RELEASE-NOTES index e848117..32e5600 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -15,6 +15,7 @@ This release includes the following changes: This release includes the following bugfixes: + o Windows uploads from stdin using curl can now contain ctrl-Z bytes o -r [num] would produce an invalid HTTP Range: header o multi interface with multi IP hosts could leak socket descriptors o the GnuTLS code didn't handle rehandshakes @@ -34,6 +35,6 @@ This release would not have looked like this without help, code, reports and advice from friends like these: Dave Dribin, Bradford Bruce, Temprimus, Ofer, Dima Barsky, Amol Pattekar, Jaz - Fresh + Fresh, tommink[at]post.pl, Gisle Vanem Thanks! (and sorry if I forgot to mention someone) diff --git a/src/main.c b/src/main.c index cd42b0d..33200ce 100644 --- a/src/main.c +++ b/src/main.c @@ -1797,8 +1797,13 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */ nextarg++; /* pass the @ */ - if(curlx_strequal("-", nextarg)) + if(curlx_strequal("-", nextarg)) { file = stdin; +#ifdef O_BINARY + if(subletter == 'b') /* forced binary */ + setmode(fileno(stdin), O_BINARY); +#endif + } else { file = fopen(nextarg, "rb"); if(!file) @@ -3620,6 +3625,9 @@ operate(struct Configurable *config, int argc, char *argv[]) } else if(uploadfile && curlx_strequal(uploadfile, "-")) { +#ifdef O_BINARY + setmode(fileno(stdin), O_BINARY); +#endif infd = stdin; } -- 2.7.4