]> granicus.if.org Git - curl/commitdiff
Fixed a problem when --dump-header - was given with more than one URL,
authorDan Fandrich <dan@coneharvesters.com>
Fri, 22 Aug 2008 22:57:25 +0000 (22:57 +0000)
committerDan Fandrich <dan@coneharvesters.com>
Fri, 22 Aug 2008 22:57:25 +0000 (22:57 +0000)
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
RELEASE-NOTES
src/main.c
tests/data/Makefile.am
tests/data/test1066 [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 6ec2ddfc1fbe3ce8ac37944e86e5ddbb668ec2a8..10d5c77875865d95327598f203c9c8708cbeb1c0 100644 (file)
--- 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.
index 67d89c52ed10b357004f71bfab555a8f2cd8f547..1d8f90ce92fc22cf4e9c5b522c2f86ce2b1e69fa 100644 (file)
@@ -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)
index 3127f093778b56b630ca61cc09decf6d683fe3eb..72a53163e39b2dfcf6e796237806b78654ba6974 100644 (file)
@@ -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)
index b51de8e524056afacaeaea7683c8914664c9e21a..8639c9dc1cf8c946d8680829803ec8b341eb9567 100644 (file)
@@ -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 (file)
index 0000000..c2cbff6
--- /dev/null
@@ -0,0 +1,82 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="1">
+HTTP/1.1 200 OK\r
+Server: thebest/1.0\r
+Content-Type: text/plain\r
+Content-Length: 6\r
+\r
+first
+</data>
+<data1 nocheck="1">
+HTTP/1.1 200 OK\r
+Server: thebest/1.0\r
+Content-Type: text/plain\r
+Content-Length: 7\r
+\r
+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\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+GET /want/10660001 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+<stdout>
+HTTP/1.1 200 OK\r
+HTTP/1.1 200 OK\r
+Server: thebest/1.0\r
+Server: thebest/1.0\r
+Content-Type: text/plain\r
+Content-Type: text/plain\r
+Content-Length: 6\r
+Content-Length: 6\r
+\r
+\r
+first
+HTTP/1.1 200 OK\r
+HTTP/1.1 200 OK\r
+Server: thebest/1.0\r
+Server: thebest/1.0\r
+Content-Type: text/plain\r
+Content-Type: text/plain\r
+Content-Length: 7\r
+Content-Length: 7\r
+\r
+\r
+second
+</stdout>
+</verify>
+</testcase>