]> granicus.if.org Git - curl/commitdiff
curl -z: do not write empty file on unmet condition
authorKamil Dudka <kdudka@redhat.com>
Thu, 23 Apr 2015 12:01:08 +0000 (14:01 +0200)
committerKamil Dudka <kdudka@redhat.com>
Thu, 23 Apr 2015 12:42:07 +0000 (14:42 +0200)
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

src/tool_operate.c
tests/data/Makefile.inc
tests/data/test1424 [new file with mode: 0644]

index 771e42da6a92df867ec85ec1590c5df4a1aa9784..74e4002b1ee6ccb66ca1dc6c5a72c64b9b247b9c 100644 (file)
@@ -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)
index 93eb4a431f047584dc9c5a110cedd47b35a2150e..9390f4669675ce9209a19355a596ae0eba423a1b 100644 (file)
@@ -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 (file)
index 0000000..17bc46a
--- /dev/null
@@ -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\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+If-Modified-Since: Sun, 12 Dec 1999 11:00:00 GMT\r
+\r
+</protocol>
+
+<file1 name="log/outfile1424">
+original contents
+</file1>
+
+</verify>
+</testcase>