From 723bfe42e7d0de40fd80b25ec64a88122f2c69f1 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Mon, 23 Aug 2004 12:34:55 +0000
Subject: [PATCH] Roman Koifman pointed out that libcurl send Expect:
 100-continue on POSTs and PUTs even when told to use HTTP 1.0, which is not
 correct.

---
 CHANGES                |  4 +++
 lib/http.c             | 30 ++++++++++++---------
 tests/data/Makefile.am |  2 +-
 tests/data/test180     | 58 +++++++++++++++++++++++++++++++++++++++++
 tests/data/test181     | 59 ++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 140 insertions(+), 13 deletions(-)
 create mode 100644 tests/data/test180
 create mode 100644 tests/data/test181

diff --git a/CHANGES b/CHANGES
index 8f4b864216..2e05f7c29b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,10 @@
 
                                   Changelog
 
+Daniel (23 August 2004)
+- Roman Koifman pointed out that libcurl send Expect: 100-continue on POSTs
+  even when told to use HTTP 1.0, which is not correct.
+
 Daniel (20 August 2004)
 - Alexander Krasnostavsky made the write callback get called even when a zero
   byte file is downloaded.
diff --git a/lib/http.c b/lib/http.c
index 07354a1c46..29ce503f87 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -1765,10 +1765,12 @@ CURLcode Curl_http(struct connectdata *conn)
           return result;
       }
 
-      if(!checkheaders(data, "Expect:")) {
-        /* if not disabled explicitly we add a Expect: 100-continue
-           to the headers which actually speeds up post operations (as
-           there is one packet coming back from the web server) */
+      if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
+         !checkheaders(data, "Expect:")) {
+        /* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
+           100-continue to the headers which actually speeds up post
+           operations (as there is one packet coming back from the web
+           server) */
         result = add_bufferf(req_buffer,
                              "Expect: 100-continue\r\n");
         if(result)
@@ -1832,10 +1834,12 @@ CURLcode Curl_http(struct connectdata *conn)
           return result;
       }
 
-      if(!checkheaders(data, "Expect:")) {
-        /* if not disabled explicitly we add a Expect: 100-continue
-           to the headers which actually speeds up post operations (as
-           there is one packet coming back from the web server) */
+      if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
+         !checkheaders(data, "Expect:")) {
+        /* if not HTTP 1.0 or disabled explicitly, we add a Expect:
+           100-continue to the headers which actually speeds up post
+           operations (as there is one packet coming back from the web
+           server) */
         result = add_bufferf(req_buffer,
                              "Expect: 100-continue\r\n");
         if(result)
@@ -1945,10 +1949,12 @@ CURLcode Curl_http(struct connectdata *conn)
           /* set the upload size to the progress meter */
           Curl_pgrsSetUploadSize(data, http->postsize);
 
-          if(!checkheaders(data, "Expect:")) {
-            /* if not disabled explicitly we add a Expect: 100-continue to the
-               headers which actually speeds up post operations (as there is
-               one packet coming back from the web server) */
+          if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
+             !checkheaders(data, "Expect:")) {
+            /* if not HTTP 1.0 or disabled explicitly, we add a Expect:
+               100-continue to the headers which actually speeds up post
+               operations (as there is one packet coming back from the web
+               server) */
             add_bufferf(req_buffer,
                         "Expect: 100-continue\r\n");
             data->set.expect100header = TRUE;
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 188cd70c2b..4da5fc3af8 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -25,7 +25,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46	\
  test158 test159 test511 test160 test161 test162 test163 test164	\
  test512 test165 test166 test167 test168 test169 test170 test171	\
  test172 test204 test205 test173 test174 test175 test176 test177	\
- test513 test514 test178 test179
+ test513 test514 test178 test179 test180 test181
 
 # The following tests have been removed from the dist since they no longer
 # work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test180 b/tests/data/test180
new file mode 100644
index 0000000000..ac4be829f2
--- /dev/null
+++ b/tests/data/test180
@@ -0,0 +1,58 @@
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 PUT
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/180 -T log/test180.txt --http1.0
+</command>
+<file name="log/test180.txt">
+Weird
+     file
+         to
+   upload
+for
+   testing
+the
+   PUT
+      feature
+</file>
+</reply>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+PUT /we/want/180 HTTP/1.0
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: */*
+Content-Length: 78
+
+Weird
+     file
+         to
+   upload
+for
+   testing
+the
+   PUT
+      feature
+</protocol>
+</verify>
diff --git a/tests/data/test181 b/tests/data/test181
new file mode 100644
index 0000000000..db7d92dc82
--- /dev/null
+++ b/tests/data/test181
@@ -0,0 +1,59 @@
+<reply>
+<data>
+HTTP/1.0 200 OK swsclose
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+
+blablabla
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP 1.0 POST
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/we/want/181 --data-binary @log/test181.txt --http1.0
+</command>
+<file name="log/test181.txt">
+Weird
+     file
+         to
+   upload
+for
+   testing
+the
+   POST
+      feature
+</file>
+</reply>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+POST /we/want/181 HTTP/1.0
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: */*
+Content-Length: 79
+Content-Type: application/x-www-form-urlencoded
+
+Weird
+     file
+         to
+   upload
+for
+   testing
+the
+   POST
+      feature
+</protocol>
+</verify>
-- 
GitLab