curl: fix -T globbing

Regression from e59371a4936f8 (7.67.0)

Added test 490, 491 and 492 to verify the functionality.

Reported-by: Kamil Dudka
Reported-by: Anderson Sasaki

Fixes #4588
Closes #4591
This commit is contained in:
Daniel Stenberg 2019-11-13 11:33:29 +01:00
parent 674298d191
commit 7a46aeb0be
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
5 changed files with 232 additions and 6 deletions

View File

@ -829,12 +829,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
separator = ((!state->outfiles ||
!strcmp(state->outfiles, "-")) && urlnum > 1);
/* Here's looping around each globbed URL */
if(state->li >= urlnum) {
state->li = 0;
state->up++;
}
if(state->up < state->infilenum) {
struct per_transfer *per;
struct OutStruct *outs;
@ -1908,6 +1902,15 @@ static CURLcode single_transfer(struct GlobalConfig *global,
per->retrystart = tvnow();
state->li++;
/* Here's looping around each globbed URL */
if(state->li >= urlnum) {
state->li = 0;
state->urlnum = 0; /* forced reglob of URLs */
glob_cleanup(state->urls);
state->urls = NULL;
state->up++;
Curl_safefree(state->uploadfile); /* clear it to get the next */
}
}
else {
/* Free this URL node data without destroying the

View File

@ -66,6 +66,8 @@ test393 test394 test395 \
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test490 test491 test492 \
\
test500 test501 test502 test503 test504 test505 test506 test507 test508 \
test509 test510 test511 test512 test513 test514 test515 test516 test517 \
test518 test519 test520 test521 test522 test523 test524 test525 test526 \

68
tests/data/test490 Normal file
View File

@ -0,0 +1,68 @@
<testcase>
<info>
<keywords>
HTTP
HTTP PUT
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes
-foo-
</data>
</reply>
#
# Client-side
<client>
<server>
http
</server>
<name>
Two globbed HTTP PUTs
</name>
<command>
http://%HOSTIP:%HTTPPORT/490 -T '{log/in490,log/in490}'
</command>
<file name="log/in490">
surprise!
</file>
</client>
#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
PUT /490 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Content-Length: 10
Expect: 100-continue
surprise!
PUT /490 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Content-Length: 10
Expect: 100-continue
surprise!
</protocol>
</verify>
</testcase>

64
tests/data/test491 Normal file
View File

@ -0,0 +1,64 @@
<testcase>
<info>
<keywords>
HTTP
HTTP PUT
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes
-foo-
</data>
</reply>
#
# Client-side
<client>
<server>
http
</server>
<name>
Two globbed HTTP PUTs, the second upload file is missing
</name>
<command>
http://%HOSTIP:%HTTPPORT/491 -T '{log/in491,log/bad491}'
</command>
<file name="log/in491">
surprise!
</file>
</client>
#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
PUT /491 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Content-Length: 10
Expect: 100-continue
surprise!
</protocol>
<errorcode>
26
</errorcode>
</verify>
</testcase>

89
tests/data/test492 Normal file
View File

@ -0,0 +1,89 @@
<testcase>
<info>
<keywords>
HTTP
HTTP PUT
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes
-foo-
</data>
</reply>
#
# Client-side
<client>
<server>
http
</server>
<name>
Two globbed HTTP PUTs to two globbed URLs
</name>
<command>
'http://%HOSTIP:%HTTPPORT/{one,two}/' -T '{log/first492,log/second492}' -H "Testno: 492"
</command>
<file name="log/first492">
first 492 contents
</file>
<file1 name="log/second492">
second 492 contents
</file1>
</client>
#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
PUT /one/first492 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Testno: 492
Content-Length: 19
Expect: 100-continue
first 492 contents
PUT /two/first492 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Testno: 492
Content-Length: 19
Expect: 100-continue
first 492 contents
PUT /one/second492 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Testno: 492
Content-Length: 20
Expect: 100-continue
second 492 contents
PUT /two/second492 HTTP/1.1
Host: 127.0.0.1:8990
Accept: */*
Testno: 492
Content-Length: 20
Expect: 100-continue
second 492 contents
</protocol>
</verify>
</testcase>