]> granicus.if.org Git - curl/commitdiff
changed case: use new host name for subsequent HTTP requests
authorDaniel Stenberg <daniel@haxx.se>
Sat, 31 Dec 2011 09:39:54 +0000 (10:39 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 31 Dec 2011 09:45:28 +0000 (10:45 +0100)
When a HTTP connection is re-used for a subsequent request without
proxy, it would always re-use the Host: header of the first request. As
host names are case insensitive it would make curl send another host
name case that what the particular request used.

Now it will instead always use the most recent host name to always use
the desired casing.

Added test case 1318 to verify.

Bug: http://curl.haxx.se/mail/lib-2011-12/0314.html
Reported by: Alex Vinnik

lib/url.c
tests/data/Makefile.am
tests/data/test1318 [new file with mode: 0644]

index a95426fe6182e01dde4877e0734e5aaba8870744..86a5576c8f7771eb2f3485e4cc154373e17e3c22 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -4666,14 +4666,10 @@ static void reuse_conn(struct connectdata *old_conn,
     old_conn->proxypasswd = NULL;
   }
 
-  /* host can change, when doing keepalive with a proxy ! */
-  if(conn->bits.proxy) {
-    Curl_safefree(conn->host.rawalloc);
-    conn->host=old_conn->host;
-  }
-  else
-    /* free the newly allocated name buffer */
-    Curl_safefree(old_conn->host.rawalloc);
+  /* host can change, when doing keepalive with a proxy or if the case is
+     different this time etc */
+  Curl_safefree(conn->host.rawalloc);
+  conn->host=old_conn->host;
 
   /* persist connection info in session handle */
   Curl_persistconninfo(conn);
index 1de2479dfa80908203adcfb5f07bbc8be6aebc66..53d94841f5464e160b0d70cf5aa5699463886cd3 100644 (file)
@@ -81,7 +81,7 @@ test1208 test1209 test1210 test1211 \
 test1220 \
 test1300 test1301 test1302 test1303 test1304 test1305  \
 test1306 test1307 test1308 test1309 test1310 test1311 test1312 test1313 \
-test1314 test1315 test1317 \
+test1314 test1315 test1317 test1318 \
 test2000 test2001 test2002 test2003 test2004
 
 EXTRA_DIST = $(TESTCASES) DISABLED
diff --git a/tests/data/test1318 b/tests/data/test1318
new file mode 100644 (file)
index 0000000..709e08d
--- /dev/null
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 0
+
+</data>
+<data1>
+HTTP/1.1 200 second version
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 0
+
+</data1>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP with same host name using different cases
+ </name>
+ <command>
+--resolve MiXeDcAsE.cOm:%HTTPPORT:%HOSTIP http://MiXeDcAsE.cOm:%HTTPPORT/1318 http://mixedcase.com:%HTTPPORT/13180001
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1318 HTTP/1.1\r
+Host: MiXeDcAsE.cOm:%HTTPPORT\r
+Accept: */*\r
+\r
+GET /13180001 HTTP/1.1\r
+Host: mixedcase.com:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
+</testcase>