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.
This commit is contained in:
parent
4b64a8d20d
commit
e3ad6d2bd1
7
CHANGES
7
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.
|
||||
|
@ -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)
|
||||
|
14
src/main.c
14
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)
|
||||
|
@ -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; \
|
||||
|
82
tests/data/test1066
Normal file
82
tests/data/test1066
Normal file
@ -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>
|
Loading…
x
Reference in New Issue
Block a user