diff options
| author | Dan Fandrich <dan@coneharvesters.com> | 2008-08-22 22:57:25 +0000 | 
|---|---|---|
| committer | Dan Fandrich <dan@coneharvesters.com> | 2008-08-22 22:57:25 +0000 | 
| commit | e3ad6d2bd111d12ba0019a916270950cf83956bf (patch) | |
| tree | fcd0c72f58ba214fc9f07c13b5a94117c9264d02 | |
| parent | 4b64a8d20d8dfaa96efcfc100e250e13b0d29c34 (diff) | |
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.
| -rw-r--r-- | CHANGES | 7 | ||||
| -rw-r--r-- | RELEASE-NOTES | 4 | ||||
| -rw-r--r-- | src/main.c | 14 | ||||
| -rw-r--r-- | tests/data/Makefile.am | 2 | ||||
| -rw-r--r-- | tests/data/test1066 | 82 | 
5 files changed, 97 insertions, 12 deletions
@@ -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 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP GET +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="1"> +HTTP/1.1 200 OK
 +Server: thebest/1.0
 +Content-Type: text/plain
 +Content-Length: 6
 +
 +first +</data> +<data1 nocheck="1"> +HTTP/1.1 200 OK
 +Server: thebest/1.0
 +Content-Type: text/plain
 +Content-Length: 7
 +
 +second +</data1> +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP --dump-header - with two URLs + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/1066 http://%HOSTIP:%HTTPPORT/want/10660001 --dump-header - +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/1066 HTTP/1.1
 +Host: %HOSTIP:%HTTPPORT
 +Accept: */*
 +
 +GET /want/10660001 HTTP/1.1
 +Host: %HOSTIP:%HTTPPORT
 +Accept: */*
 +
 +</protocol> +<stdout> +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 +</stdout> +</verify> +</testcase>  | 
