summaryrefslogtreecommitdiff
path: root/lib/uri
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-03 18:00:08 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-03 18:00:08 +0000
commit7af73882028f65c96015a1c8801b40565f9c0119 (patch)
treef0987bc87fc1bd181513f92781ef669387abc906 /lib/uri
parent4a393563430586dd2fb0de28ca544e112ccb01c4 (diff)
* lib/uri/generic.rb (URI::Generic#query=): remove validation, just
escape. [Feature #2542] * lib/uri/generic.rb (URI::Generic#fragment=): ditto. * lib/uri/generic.rb (URI::Generic#check_query): removed. * lib/uri/generic.rb (URI::Generic#set_query): ditto. * lib/uri/generic.rb (URI::Generic#check_fragment): ditto. * lib/uri/generic.rb (URI::Generic#set_fragment): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/uri')
-rw-r--r--lib/uri/generic.rb107
1 files changed, 30 insertions, 77 deletions
diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb
index 7fbe5ff396..32a4417701 100644
--- a/lib/uri/generic.rb
+++ b/lib/uri/generic.rb
@@ -196,9 +196,9 @@ module URI
self.set_host(host)
self.set_port(port)
self.set_path(path)
- self.set_query(query)
+ self.query = query
self.set_opaque(opaque)
- self.set_fragment(fragment)
+ self.fragment=(fragment)
end
if registry
raise InvalidURIError,
@@ -823,42 +823,6 @@ module URI
end
#
- # check the query +v+ component for RFC2396 compliance
- # and against the URI::Parser Regexp for :QUERY
- #
- # Can not have a opaque component defined,
- # with a query component defined.
- #
- def check_query(v)
- return v unless v
-
- # raise if both hier and opaque are not nil, because:
- # absoluteURI = scheme ":" ( hier_part | opaque_part )
- # hier_part = ( net_path | abs_path ) [ "?" query ]
- if @opaque
- raise InvalidURIError,
- "query conflicts with opaque"
- end
-
- if v && v != '' && parser.regexp[:QUERY] !~ v
- raise InvalidComponentError,
- "bad component(expected query component): #{v}"
- end
-
- return true
- end
- private :check_query
-
- # protected setter for the query component +v+
- #
- # see also URI::Generic.query=
- #
- def set_query(v)
- @query = v
- end
- protected :set_query
-
- #
# == Args
#
# +v+::
@@ -867,9 +831,6 @@ module URI
# == Description
#
# public setter for the query component +v+.
- # (with validation)
- #
- # see also URI::Generic.check_query
#
# == Usage
#
@@ -882,9 +843,17 @@ module URI
# #=> #<URI::HTTP:0x000000008e89e8 URL:http://my.example.com/?id=1>
#
def query=(v)
- check_query(v)
- set_query(v)
- v
+ return @query = nil unless v
+ raise InvalidURIError, "query conflicts with opaque" if @opaque
+
+ x = v.to_str
+ v = x.dup if x.equal? v
+ v.encode!(Encoding::UTF_8) rescue nil
+ v.delete!("\t\r\n")
+ v.force_encoding(Encoding::ASCII_8BIT)
+ v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n){'%%%02X' % $&.ord}
+ v.force_encoding(Encoding::US_ASCII)
+ @query = v
end
#
@@ -943,27 +912,6 @@ module URI
#
# check the fragment +v+ component against the URI::Parser Regexp for :FRAGMENT
#
- def check_fragment(v)
- return v unless v
-
- if v && v != '' && parser.regexp[:FRAGMENT] !~ v
- raise InvalidComponentError,
- "bad component(expected fragment component): #{v}"
- end
-
- return true
- end
- private :check_fragment
-
- # protected setter for the fragment component +v+
- #
- # see also URI::Generic.fragment=
- #
- def set_fragment(v)
- @fragment = v
- end
- protected :set_fragment
-
#
# == Args
#
@@ -975,8 +923,6 @@ module URI
# public setter for the fragment component +v+.
# (with validation)
#
- # see also URI::Generic.check_fragment
- #
# == Usage
#
# require 'uri'
@@ -988,9 +934,16 @@ module URI
# #=> #<URI::HTTP:0x000000007a81f8 URL:http://my.example.com/?id=25#time=1305212086>
#
def fragment=(v)
- check_fragment(v)
- set_fragment(v)
- v
+ return @fragment = nil unless v
+
+ x = v.to_str
+ v = x.dup if x.equal? v
+ v.encode!(Encoding::UTF_8) rescue nil
+ v.delete!("\t\r\n")
+ v.force_encoding(Encoding::ASCII_8BIT)
+ v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord}
+ v.force_encoding(Encoding::US_ASCII)
+ @fragment = v
end
#
@@ -1160,12 +1113,12 @@ module URI
# RFC2396, Section 5.2, 2)
if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
- base.set_fragment(rel.fragment) if rel.fragment
+ base.fragment=(rel.fragment) if rel.fragment
return base
end
- base.set_query(nil)
- base.set_fragment(nil)
+ base.query = nil
+ base.fragment=(nil)
# RFC2396, Section 5.2, 4)
if !authority
@@ -1179,8 +1132,8 @@ module URI
base.set_userinfo(rel.userinfo) if rel.userinfo
base.set_host(rel.host) if rel.host
base.set_port(rel.port) if rel.port
- base.set_query(rel.query) if rel.query
- base.set_fragment(rel.fragment) if rel.fragment
+ base.query = rel.query if rel.query
+ base.fragment=(rel.fragment) if rel.fragment
return base
end # merge
@@ -1287,11 +1240,11 @@ module URI
if rel.path && rel.path == oth.path
rel.set_path('')
- rel.set_query(nil) if rel.query == oth.query
+ rel.query = nil if rel.query == oth.query
return rel, rel
elsif rel.opaque && rel.opaque == oth.opaque
rel.set_opaque('')
- rel.set_query(nil) if rel.query == oth.query
+ rel.query = nil if rel.query == oth.query
return rel, rel
end