diff --git a/lib/uri/rfc3986_parser.rb b/lib/uri/rfc3986_parser.rb index 59e2be280578b0..ffdcfa92276efe 100644 --- a/lib/uri/rfc3986_parser.rb +++ b/lib/uri/rfc3986_parser.rb @@ -26,11 +26,6 @@ class RFC3986_Parser # :nodoc: ]x USERINFO = /(?:%\h\h|[!$&-.0-9:;=A-Z_a-z~])*+/ - AUTHORITY = %r[ - (?:(?#{USERINFO.source})@)? - (?#{HOST.source.delete(" \n")}) - (?::(?\d*+))? - ]x SCHEME = %r[[A-Za-z][+\-.0-9A-Za-z]*+].source SEG = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/])].source @@ -42,7 +37,11 @@ class RFC3986_Parser # :nodoc: (? (?#{SCHEME}): (?// - (?#{AUTHORITY}) + (? + (?:(?#{USERINFO.source})@)? + (?#{HOST.source.delete(" \n")}) + (?::(?\d*+))? + ) (?(?:/\g*+)?) | (?/((?!/)\g++)?) | (?(?!/)\g++) @@ -56,7 +55,11 @@ class RFC3986_Parser # :nodoc: (?#{SEG}){0} (? (?// - (?#{AUTHORITY}) + (? + (?:(?#{USERINFO.source})@)? + (?#{HOST.source.delete(" \n")}(?\d*+))? + ) (?(?:/\g*+)?) | (?/\g*+) | (?#{SEG_NC}++(?:/\g*+)?) diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb index 3897c3d6eed38a..e6619373c65d4a 100644 --- a/test/uri/test_generic.rb +++ b/test/uri/test_generic.rb @@ -977,6 +977,10 @@ def test_use_proxy_p end end + def test_split + assert_equal [nil, nil, nil, nil, nil, "", nil, nil, nil], URI.split("//") + end + class CaseInsensitiveEnv def initialize(h={}) @h = {}