From 8ce78ca488f589d9b1987e7713f28f9da15cba0f Mon Sep 17 00:00:00 2001
From: Dan Fandrich <dan@coneharvesters.com>
Date: Thu, 28 Aug 2008 06:28:07 +0000
Subject: [PATCH] Fixed test case 1065 by changing the handling of
 CURLOPT_UPLOAD to set the HTTP method to GET (or HEAD) when given a value of
 0.

---
 CHANGES             | 7 +++++++
 RELEASE-NOTES       | 1 +
 lib/url.c           | 3 +++
 tests/data/DISABLED | 1 -
 tests/data/test1065 | 6 +++---
 5 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/CHANGES b/CHANGES
index ce0abeba04..21f345bd2e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,13 @@
 
                                   Changelog
 
+Daniel Fandrich (27 Aug 2008)
+- Fixed test case 1065 by changing the handling of CURLOPT_UPLOAD to set
+  the HTTP method to GET (or HEAD) when given a value of 0.
+
+- Added test cases 1068 and 1069 to test a simple HTTP PUT from stdin.  Test
+  case 1069 fails in a similar manner to test 1065 so is added to DISABLED.
+
 Yang Tse (27 Aug 2008)
 - Fix generation of MS VC6 .dsp file to make it support compilation of either
   dynamic (DLL) or static (LIB) libcurl libraries in debug and release modes.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index d082085c31..cfdb11979b 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -58,6 +58,7 @@ This release includes the following bugfixes:
  o improved curl_m*printf() integral data type size and signedness handling
  o error when --dump-header - used with more than one URL
  o proxy closing connect during CONNECT with auth with the multi interface
+ o CURLOPT_UPLOAD sets HTTP method back to GET or HEAD when passed in a 0
 
 This release includes the following known bugs:
 
diff --git a/lib/url.c b/lib/url.c
index 41222f0ecd..a70b471b25 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -888,6 +888,9 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     if(data->set.upload)
       /* If this is HTTP, PUT is what's needed to "upload" */
       data->set.httpreq = HTTPREQ_PUT;
+    else
+      /* In HTTP, the opposite of upload is either GET or a HEAD */
+      data->set.httpreq = data->set.opt_no_body?HTTPREQ_HEAD:HTTPREQ_GET;
     break;
   case CURLOPT_FILETIME:
     /*
diff --git a/tests/data/DISABLED b/tests/data/DISABLED
index 9e61456de6..87d335550b 100644
--- a/tests/data/DISABLED
+++ b/tests/data/DISABLED
@@ -3,5 +3,4 @@
 # test cases are run by runtests.pl. Just add the plain test case numbers, one
 # per line.
 # Lines starting with '#' letters are treated as comments.
-1065
 1069
diff --git a/tests/data/test1065 b/tests/data/test1065
index 700d8110be..87f4654ca3 100644
--- a/tests/data/test1065
+++ b/tests/data/test1065
@@ -3,6 +3,7 @@
 <keywords>
 HTTP
 HTTP PUT
+HTTP GET
 </keywords>
 </info>
 
@@ -35,7 +36,7 @@ http
 HTTP PUT with one file but two URLs
  </name>
  <command>
--H "Expect:" -T log/1065 http://%HOSTIP:%HTTPPORT/1065.upload1 http://%HOSTIP:%HTTPPORT/10650002.upload2
+-H "Expect:" -T log/1065 http://%HOSTIP:%HTTPPORT/1065.upload1 http://%HOSTIP:%HTTPPORT/10650002.url2
 </command>
 <file name="log/1065">
 test
@@ -54,10 +55,9 @@ Accept: */*
 Content-Length: 5
 
 test
-PUT /10650002.upload2 HTTP/1.1
+GET /10650002.url2 HTTP/1.1
 Host: %HOSTIP:%HTTPPORT
 Accept: */*
-Content-Length: 0
 
 </protocol>
 <stdout>
-- 
GitLab