aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Dudka <kdudka@redhat.com>2015-04-23 14:01:08 +0200
committerKamil Dudka <kdudka@redhat.com>2015-04-23 14:42:07 +0200
commit710a2e99b569d3f7bbc2771badcb1add87bb7e09 (patch)
treeb6e1087799e732a7ee41aeee866ebabe3b5686c1
parent79478fdb68ecdb2e36ae634262133670ada44084 (diff)
curl -z: do not write empty file on unmet condition
This commit fixes a regression introduced in curl-7_41_0-186-g261a0fe. It also introduces a regression test 1424 based on tests 78 and 1423. Reported-by: Viktor Szakats Bug: https://github.com/bagder/curl/issues/237
-rw-r--r--src/tool_operate.c17
-rw-r--r--tests/data/Makefile.inc2
-rw-r--r--tests/data/test142476
3 files changed, 88 insertions, 7 deletions
diff --git a/src/tool_operate.c b/src/tool_operate.c
index 771e42da6..74e4002b1 100644
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@ -1388,12 +1388,17 @@ static CURLcode operate_do(struct GlobalConfig *global,
#endif
result = curl_easy_perform(curl);
- if(!result && !outs.stream && !outs.bytes
- /* we have received no data despite the transfer was successful
- ==> force cration of an empty output file (if an output file
- was specified) */
- && !tool_create_output_file(&outs))
- result = CURLE_WRITE_ERROR;
+ if(!result && !outs.stream && !outs.bytes) {
+ /* we have received no data despite the transfer was successful
+ ==> force cration of an empty output file (if an output file
+ was specified) */
+ long cond_unmet = 0L;
+ /* do not create (or even overwrite) the file in case we get no
+ data because of unmet condition */
+ curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &cond_unmet);
+ if(!cond_unmet && !tool_create_output_file(&outs))
+ result = CURLE_WRITE_ERROR;
+ }
if(outs.is_cd_filename && outs.stream && !global->mute &&
outs.filename)
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index 93eb4a431..9390f4669 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -143,7 +143,7 @@ test1396 test1397 test1398 \
test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
-\
+test1424 \
test1428 test1429 test1430 test1431 test1432 test1433 test1434 test1435 \
test1436 \
\
diff --git a/tests/data/test1424 b/tests/data/test1424
new file mode 100644
index 000000000..17bc46a1d
--- /dev/null
+++ b/tests/data/test1424
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+If-Modified-Since
+-z
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 1990 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>
+<datacheck>
+HTTP/1.1 200 OK
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 1990 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP GET -o fname without Content-Disposition (unmet time condition)
+</name>
+<file name="log/outfile1424">
+original contents
+</file>
+<command option="no-output,no-include">
+http://%HOSTIP:%HTTPPORT/1424 -z "dec 12 11:00:00 1999 GMT" -o log/outfile1424
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1424 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+If-Modified-Since: Sun, 12 Dec 1999 11:00:00 GMT
+
+</protocol>
+
+<file1 name="log/outfile1424">
+original contents
+</file1>
+
+</verify>
+</testcase>