Loading lib/transfer.c +30 −19 Original line number Diff line number Diff line Loading @@ -1699,8 +1699,18 @@ static char *concat_url(const char *base, const char *relurl) } } else { /* We got a new absolute path for this server, cut off from the first slash */ /* We got a new absolute path for this server */ if((relurl[0] == '/') && (relurl[1] == '/')) { /* the new URL starts with //, just keep the protocol part from the original one */ *protsep=0; useurl = &relurl[2]; /* we keep the slashes from the original, so we skip the new ones */ } else { /* cut off the original URL from the first slash, or deal with URLs without slash */ pathsep = strchr(protsep, '/'); if(pathsep) { /* When people use badly formatted URLs, such as Loading @@ -1721,6 +1731,7 @@ static char *concat_url(const char *base, const char *relurl) *pathsep=0; } } } /* If the new part contains a space, this is a mighty stupid redirect but we still make an effort to do "right". To the left of a '?' Loading tests/data/Makefile.am +1 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ test1118 test1119 test1120 test1121 test1122 test1123 test1124 test1125 \ test1126 test1127 test1128 test1129 test1130 test1131 test1200 test1201 \ test1202 test1203 test1300 test1301 test1302 test1303 test1304 test1305 \ test1306 test1307 test1308 test1309 test1310 test1311 test1312 test1313 \ test1314 \ test2000 test2001 test2002 test2003 test2004 EXTRA_DIST = $(TESTCASES) DISABLED Loading tests/data/test1314 0 → 100644 +77 −0 Original line number Diff line number Diff line <testcase> <info> <keywords> HTTP HTTP GET followlocation </keywords> </info> # Server-side <reply> <data> HTTP/1.1 301 This is a weirdo text message swsbounce Server: test-server/fake Location: //somewhere.example.com/reply/1314 Content-Length: 32 Connection: close Redirect to the same URL again! </data> <data1> HTTP/1.1 200 okidoki Server: test-server/fake Content-Length: 4 Connection: close moo </data> <datacheck> HTTP/1.1 301 This is a weirdo text message swsbounce Server: test-server/fake Location: //somewhere.example.com/reply/1314 Content-Length: 32 Connection: close HTTP/1.1 200 okidoki Server: test-server/fake Content-Length: 4 Connection: close moo </datacheck> </reply> # Client-side <client> <server> http </server> <name> HTTP Location: following a // prefixed url </name> <command> http://firstplace.example.com/want/1314 -L -x http://%HOSTIP:%HTTPPORT </command> </client> # Verify data after the test has been "shot" <verify> <strip> ^User-Agent: curl/.* </strip> <protocol> GET http://firstplace.example.com/want/1314 HTTP/1.1 Host: firstplace.example.com Accept: */* Proxy-Connection: Keep-Alive GET http://somewhere.example.com/reply/1314 HTTP/1.1 Host: somewhere.example.com Accept: */* Proxy-Connection: Keep-Alive </protocol> </verify> </testcase> Loading
lib/transfer.c +30 −19 Original line number Diff line number Diff line Loading @@ -1699,8 +1699,18 @@ static char *concat_url(const char *base, const char *relurl) } } else { /* We got a new absolute path for this server, cut off from the first slash */ /* We got a new absolute path for this server */ if((relurl[0] == '/') && (relurl[1] == '/')) { /* the new URL starts with //, just keep the protocol part from the original one */ *protsep=0; useurl = &relurl[2]; /* we keep the slashes from the original, so we skip the new ones */ } else { /* cut off the original URL from the first slash, or deal with URLs without slash */ pathsep = strchr(protsep, '/'); if(pathsep) { /* When people use badly formatted URLs, such as Loading @@ -1721,6 +1731,7 @@ static char *concat_url(const char *base, const char *relurl) *pathsep=0; } } } /* If the new part contains a space, this is a mighty stupid redirect but we still make an effort to do "right". To the left of a '?' Loading
tests/data/Makefile.am +1 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ test1118 test1119 test1120 test1121 test1122 test1123 test1124 test1125 \ test1126 test1127 test1128 test1129 test1130 test1131 test1200 test1201 \ test1202 test1203 test1300 test1301 test1302 test1303 test1304 test1305 \ test1306 test1307 test1308 test1309 test1310 test1311 test1312 test1313 \ test1314 \ test2000 test2001 test2002 test2003 test2004 EXTRA_DIST = $(TESTCASES) DISABLED Loading
tests/data/test1314 0 → 100644 +77 −0 Original line number Diff line number Diff line <testcase> <info> <keywords> HTTP HTTP GET followlocation </keywords> </info> # Server-side <reply> <data> HTTP/1.1 301 This is a weirdo text message swsbounce Server: test-server/fake Location: //somewhere.example.com/reply/1314 Content-Length: 32 Connection: close Redirect to the same URL again! </data> <data1> HTTP/1.1 200 okidoki Server: test-server/fake Content-Length: 4 Connection: close moo </data> <datacheck> HTTP/1.1 301 This is a weirdo text message swsbounce Server: test-server/fake Location: //somewhere.example.com/reply/1314 Content-Length: 32 Connection: close HTTP/1.1 200 okidoki Server: test-server/fake Content-Length: 4 Connection: close moo </datacheck> </reply> # Client-side <client> <server> http </server> <name> HTTP Location: following a // prefixed url </name> <command> http://firstplace.example.com/want/1314 -L -x http://%HOSTIP:%HTTPPORT </command> </client> # Verify data after the test has been "shot" <verify> <strip> ^User-Agent: curl/.* </strip> <protocol> GET http://firstplace.example.com/want/1314 HTTP/1.1 Host: firstplace.example.com Accept: */* Proxy-Connection: Keep-Alive GET http://somewhere.example.com/reply/1314 HTTP/1.1 Host: somewhere.example.com Accept: */* Proxy-Connection: Keep-Alive </protocol> </verify> </testcase>