Project

General

Profile

Bug #15979 ยป uri-parse-validate-15979.patch

jeremyevans0 (Jeremy Evans), 10/10/2019 10:47 PM

View differences:

lib/uri/common.rb
module URI
REGEXP = RFC2396_REGEXP
Parser = RFC2396_Parser
RFC3986_PARSER = RFC3986_Parser.new
Parser = RFC3986_Parser
RFC3986_PARSER = Parser.new
DEFAULT_PARSER = RFC3986_PARSER
# URI::Parser.new
DEFAULT_PARSER = Parser.new
DEFAULT_PARSER.pattern.each_pair do |sym, str|
RFC2396_PARSER = RFC2396_Parser.new
RFC2396_PARSER.pattern.each_pair do |sym, str|
unless REGEXP::PATTERN.const_defined?(sym)
REGEXP::PATTERN.const_set(sym, str)
end
end
DEFAULT_PARSER.regexp.each_pair do |sym, str|
RFC2396_PARSER.regexp.each_pair do |sym, str|
const_set(sym, str)
end
......
#
def self.extract(str, schemes = nil, &block)
warn "URI.extract is obsolete", uplevel: 1 if $VERBOSE
DEFAULT_PARSER.extract(str, schemes, &block)
RFC2396_PARSER.extract(str, schemes, &block)
end
#
......
#
def self.regexp(schemes = nil)
warn "URI.regexp is obsolete", uplevel: 1 if $VERBOSE
DEFAULT_PARSER.make_regexp(schemes)
RFC2396_PARSER.make_regexp(schemes)
end
TBLENCWWWCOMP_ = {} # :nodoc:
lib/uri/generic.rb
if args.kind_of?(Array)
return self.build(args.collect{|x|
if x.is_a?(String)
DEFAULT_PARSER.escape(x)
RFC2396_PARSER.escape(x)
else
x
end
......
tmp = {}
args.each do |key, value|
tmp[key] = if value
DEFAULT_PARSER.escape(value)
RFC2396_PARSER.escape(value)
else
value
end
test/uri/test_parser.rb
def test_parse
escaped = URI::REGEXP::PATTERN::ESCAPED
hex = URI::REGEXP::PATTERN::HEX
p1 = URI::Parser.new(:ESCAPED => "(?:#{escaped}|%u[#{hex}]{4})")
p1 = URI::RFC2396_Parser.new(:ESCAPED => "(?:#{escaped}|%u[#{hex}]{4})")
u1 = p1.parse('http://a/b/%uABCD')
assert_equal(['http', nil, 'a', URI::HTTP.default_port, '/b/%uABCD', nil, nil],
uri_to_ary(u1))
......
end
def test_unescape
p1 = URI::Parser.new
p1 = URI::RFC2396_Parser.new
assert_equal("\xe3\x83\x90", p1.unescape("\xe3\x83\x90"))
assert_equal("\xe3\x83\x90", p1.unescape('%e3%83%90'))
assert_equal("\u3042", p1.unescape('%e3%81%82'.force_encoding(Encoding::US_ASCII)))
    (1-1/1)