Commit 81b41095 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Curl_follow: handle redirects to "//hostname/path"

parent 49c35a7f
Loading
Loading
Loading
Loading
+30 −19
Original line number Diff line number Diff line
@@ -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
@@ -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 '?'
+1 −0
Original line number Diff line number Diff line
@@ -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

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>