Commit e3ad6d2b authored by Dan Fandrich's avatar Dan Fandrich
Browse files

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.
parent 4b64a8d2
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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.
+3 −1
Original line number Diff line number Diff line
@@ -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)
+4 −10
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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; \

tests/data/test1066

0 → 100644
+82 −0
Original line number Diff line number Diff line
<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>