Commit 536c2aa6 authored by Jacob Baskin's avatar Jacob Baskin

URL should have an empty Scheme if there is an invalid character (i.e.

not [a-zA-Z0-9+-.]) before there is a ":".

This is particularly helpful in the erroneous-but-relatively-common
case of relative URLs containing an unescaped colon in the query
string--see the added test for an example.

R=rsc
APPROVED=rsc
DELTA=15  (15 added, 0 deleted, 0 changed)
OCL=30354
CL=30356
parent d8e4446d
...@@ -180,6 +180,10 @@ func getscheme(rawurl string) (scheme, path string, err os.Error) { ...@@ -180,6 +180,10 @@ func getscheme(rawurl string) (scheme, path string, err os.Error) {
return "", "", BadURL{"missing protocol scheme"} return "", "", BadURL{"missing protocol scheme"}
} }
return rawurl[0:i], rawurl[i+1:len(rawurl)], nil return rawurl[0:i], rawurl[i+1:len(rawurl)], nil
default:
// we have encountered an invalid character,
// so there is no valid scheme
return "", rawurl, nil
} }
} }
return "", rawurl, nil return "", rawurl, nil
......
...@@ -134,6 +134,17 @@ var urltests = []URLTest { ...@@ -134,6 +134,17 @@ var urltests = []URLTest {
}, },
"" ""
}, },
// unescaped :// in query should not create a scheme
URLTest{
"/foo?query=http://bad",
&URL{
"/foo?query=http://bad",
"", "/foo?query=http://bad",
"", "", "",
"/foo", "query=http://bad", ""
},
""
},
} }
var urlnofragtests = []URLTest { var urlnofragtests = []URLTest {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment