summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-12-31 10:39:54 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-12-31 10:45:28 +0100
commit207cf15032a7e8eab71b2f4655fc5c21e5d3623d (patch)
tree7a1aec3decaba8c2b1be12279ee88dc207381bc2
parent5e0a44e4d58855a52b6e0744df4fab09ded3873c (diff)
downloadcurl-207cf15032a7e8eab71b2f4655fc5c21e5d3623d.tar.gz
changed case: use new host name for subsequent HTTP requests
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
-rw-r--r--lib/url.c12
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test131859
3 files changed, 64 insertions, 9 deletions
diff --git a/lib/url.c b/lib/url.c
index a95426fe6..86a5576c8 100644
--- 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);
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 1de2479df..53d94841f 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -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
index 000000000..709e08dc3
--- /dev/null
+++ b/tests/data/test1318
@@ -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
+Host: MiXeDcAsE.cOm:%HTTPPORT
+Accept: */*
+
+GET /13180001 HTTP/1.1
+Host: mixedcase.com:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>