summaryrefslogtreecommitdiff
path: root/lib/uri/rfc3986_parser.rb
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-06-13 13:54:44 +0900
committergit <svn-admin@ruby-lang.org>2023-06-13 05:57:17 +0000
commit6d734a89751d5553f22dbb674247f25c825e9274 (patch)
tree85c73f2b466a597e96d7667aa07f75cb46bc4e99 /lib/uri/rfc3986_parser.rb
parent3924dba552804773fd66d98a57539ccb16943835 (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.rb9
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],