From e3ad6d2bd111d12ba0019a916270950cf83956bf Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Fri, 22 Aug 2008 22:57:25 +0000 Subject: Fixed a problem when --dump-header - was given with more than one URL, which caused an error when the second header was dumped due to stdout being closed. Added test case 1066 to verify. Also fixed a potential problem where a closed file descriptor might be used for an upload when more than one URL is given. --- CHANGES | 7 +++++ RELEASE-NOTES | 4 ++- src/main.c | 14 +++------ tests/data/Makefile.am | 2 +- tests/data/test1066 | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 tests/data/test1066 diff --git a/CHANGES b/CHANGES index 6ec2ddfc1..10d5c7787 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,13 @@ Changelog +Daniel Fandrich (22 Aug 2008) +- Fixed a problem when --dump-header - was given with more than one URL, + which caused an error when the second header was dumped due to stdout + being closed. Added test case 1066 to verify. Also fixed a potential + problem where a closed file descriptor might be used for an upload + when more than one URL is given. + Yang Tse (22 Aug 2008) - Improved libcurl's internal curl_m*printf() functions integral data type size and signedness handling. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 67d89c52e..1d8f90ce9 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -56,6 +56,7 @@ This release includes the following bugfixes: o --stderr is now honoured with the -v option o memory leak in libcurl on Windows built with OpenSSL o improved curl_m*printf() integral data type size and signedness handling + o error when --dump-header - used with more than one URL This release includes the following known bugs: @@ -77,7 +78,8 @@ advice from friends like these: Phil Pellouchoud, Eduard Bloch, John Lightsey, Stephen Collyer, Tor Arntsen, Rolland Dudemaine, Phil Blundell, Scott Barrett, Andreas Schuldei, Peter Lamberg, David Bau, Pramod Sharma, Yehoshua Hershberg, - Constantine Sapuntzakis, Lars Nilsson, Andy Tsouladze, Jamie Lokier + Constantine Sapuntzakis, Lars Nilsson, Andy Tsouladze, Jamie Lokier, + Vincent Le Normand Thanks! (and sorry if I forgot to mention someone) diff --git a/src/main.c b/src/main.c index 3127f0937..72a53163e 100644 --- a/src/main.c +++ b/src/main.c @@ -3890,9 +3890,6 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) int infilenum; char *uploadfile=NULL; /* a single file, never a glob */ - int infd = STDIN_FILENO; - bool infdopen; - FILE *headerfilep = NULL; curl_off_t uploadfilesize; /* -1 means unknown */ bool stillflags=TRUE; @@ -4126,11 +4123,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) /* open file for output: */ if(strcmp(config->headerfile,"-")) { heads.filename = config->headerfile; - headerfilep=NULL; } else - headerfilep=stdout; - heads.stream = headerfilep; + heads.stream=stdout; heads.config = config; } @@ -4218,6 +4213,8 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) for(i = 0; (url = urls?glob_next_url(urls):(i?NULL:strdup(url))); i++) { + int infd = STDIN_FILENO; + bool infdopen; char *outfile; struct timeval retrystart; outfile = outfiles?strdup(outfiles):NULL; @@ -4965,9 +4962,6 @@ show_error: #endif quit_urls: - if(headerfilep) - fclose(headerfilep); - if(url) free(url); @@ -5026,7 +5020,7 @@ quit_curl: if (easycode) curl_slist_append(easycode, "curl_easy_cleanup(hnd);"); - if(config->headerfile && !headerfilep && heads.stream) + if(heads.stream && (heads.stream != stdout)) fclose(heads.stream); if(allocuseragent) diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index b51de8e52..8639c9dc1 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -56,7 +56,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \ test1048 test1049 test1050 test1051 test1052 test1053 test1054 test1055 \ test1056 test1057 test1058 test1059 test1060 test1061 test1062 test1063 \ - test1064 test1065 + test1064 test1065 test1066 filecheck: @mkdir test-place; \ diff --git a/tests/data/test1066 b/tests/data/test1066 new file mode 100644 index 000000000..c2cbff691 --- /dev/null +++ b/tests/data/test1066 @@ -0,0 +1,82 @@ + + + +HTTP +HTTP GET + + + +# Server-side + + +HTTP/1.1 200 OK +Server: thebest/1.0 +Content-Type: text/plain +Content-Length: 6 + +first + + +HTTP/1.1 200 OK +Server: thebest/1.0 +Content-Type: text/plain +Content-Length: 7 + +second + + + +# Client-side + + +http + + +HTTP --dump-header - with two URLs + + +http://%HOSTIP:%HTTPPORT/want/1066 http://%HOSTIP:%HTTPPORT/want/10660001 --dump-header - + + + +# Verify data after the test has been "shot" + + +^User-Agent:.* + + +GET /want/1066 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* + +GET /want/10660001 HTTP/1.1 +Host: %HOSTIP:%HTTPPORT +Accept: */* + + + +HTTP/1.1 200 OK +HTTP/1.1 200 OK +Server: thebest/1.0 +Server: thebest/1.0 +Content-Type: text/plain +Content-Type: text/plain +Content-Length: 6 +Content-Length: 6 + + +first +HTTP/1.1 200 OK +HTTP/1.1 200 OK +Server: thebest/1.0 +Server: thebest/1.0 +Content-Type: text/plain +Content-Type: text/plain +Content-Length: 7 +Content-Length: 7 + + +second + + + -- cgit v1.2.3