diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-06-13 13:54:44 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-06-13 05:57:17 +0000 |
commit | 6d734a89751d5553f22dbb674247f25c825e9274 (patch) | |
tree | 85c73f2b466a597e96d7667aa07f75cb46bc4e99 /lib/uri/rfc3986_parser.rb | |
parent | 3924dba552804773fd66d98a57539ccb16943835 (diff) |
[ruby/uri] Fix RFC3986 regexps
https://github.com/ruby/uri/commit/8e38592241
Diffstat (limited to 'lib/uri/rfc3986_parser.rb')
-rw-r--r-- | lib/uri/rfc3986_parser.rb | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/uri/rfc3986_parser.rb b/lib/uri/rfc3986_parser.rb index 8cc51f1286..59e2be2805 100644 --- a/lib/uri/rfc3986_parser.rb +++ b/lib/uri/rfc3986_parser.rb @@ -34,6 +34,7 @@ module URI SCHEME = %r[[A-Za-z][+\-.0-9A-Za-z]*+].source SEG = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/])].source + SEG_NC = %r[(?:%\h\h|[!$&-.0-9;=@A-Z_a-z~])].source FRAGMENT = %r[(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+].source RFC3986_URI = %r[\A @@ -43,8 +44,8 @@ module URI (?<hier-part>// (?<authority>#{AUTHORITY}) (?<path-abempty>(?:/\g<seg>*+)?) - | (?<path-absolute>/\g<seg>*+) - | (?<path-rootless>(?!=/)\g<seg>++) + | (?<path-absolute>/((?!/)\g<seg>++)?) + | (?<path-rootless>(?!/)\g<seg>++) | (?<path-empty>) ) (?:\?(?<query>[^\#]*+))? @@ -58,7 +59,7 @@ module URI (?<authority>#{AUTHORITY}) (?<path-abempty>(?:/\g<seg>*+)?) | (?<path-absolute>/\g<seg>*+) - | (?<path-noscheme>(?!=[:/])\g<seg>++) + | (?<path-noscheme>#{SEG_NC}++(?:/\g<seg>*+)?) | (?<path-empty>) ) (?:\?(?<query>[^#]*+))? @@ -156,7 +157,7 @@ module URI USERINFO: %r[\A#{USERINFO}\z]o, HOST: %r[\A#{HOST}\z]o, ABS_PATH: %r[\A/#{SEG}*+\z]o, - REL_PATH: %r[\A(?!=/)#{SEG}++\z]o, + REL_PATH: %r[\A(?!/)#{SEG}++\z]o, QUERY: %r[\A(?:%\h\h|[!$&-.0-9:;=@A-Z_a-z~/?])*+\z], FRAGMENT: %r[\A#{FRAGMENT}\z]o, OPAQUE: %r[\A(?:[^/].*)?\z], |