mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* lib/uri: don't set @parser if it is DEFAULT_PARSER for marshaling
URI objects between Ruby 1.8 and Ruby 1.9. [ruby-dev:38377] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23598 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									7afe0c92ea
								
							
						
					
					
						commit
						0fd221bd78
					
				
					 3 changed files with 43 additions and 30 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,9 @@
 | 
			
		|||
Thu May 28 02:40:54 2009  Tanaka Akira  <akr@fsij.org>
 | 
			
		||||
 | 
			
		||||
	* lib/uri: don't set @parser if it is DEFAULT_PARSER for marshaling
 | 
			
		||||
	  URI objects between Ruby 1.8 and Ruby 1.9.
 | 
			
		||||
	  [ruby-dev:38377]
 | 
			
		||||
 | 
			
		||||
Wed May 27 23:00:38 2009  Nobuyoshi Nakada  <nobu@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* parse.y (struct parser_params): lex_gets_ptr should be long.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ module URI
 | 
			
		|||
        if args.kind_of?(Array)
 | 
			
		||||
          return self.build(args.collect{|x|
 | 
			
		||||
            if x
 | 
			
		||||
              @parser.escape(x)
 | 
			
		||||
              parser.escape(x)
 | 
			
		||||
            else
 | 
			
		||||
              x
 | 
			
		||||
            end
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ module URI
 | 
			
		|||
          tmp = {}
 | 
			
		||||
          args.each do |key, value|
 | 
			
		||||
            tmp[key] = if value
 | 
			
		||||
                @parser.escape(value)
 | 
			
		||||
                parser.escape(value)
 | 
			
		||||
              else
 | 
			
		||||
                value
 | 
			
		||||
              end
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +121,7 @@ module URI
 | 
			
		|||
        "expected Array of or Hash of components of #{self.class} (#{self.class.component.join(', ')})"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      tmp << DEFAULT_PARSER
 | 
			
		||||
      tmp << nil
 | 
			
		||||
      tmp << true
 | 
			
		||||
      return self.new(*tmp)
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +172,7 @@ module URI
 | 
			
		|||
      @opaque = nil
 | 
			
		||||
      @registry = nil
 | 
			
		||||
      @fragment = nil
 | 
			
		||||
      @parser = parser
 | 
			
		||||
      @parser = parser == DEFAULT_PARSER ? nil : parser
 | 
			
		||||
 | 
			
		||||
      if arg_check
 | 
			
		||||
        self.scheme = scheme
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +212,14 @@ module URI
 | 
			
		|||
    attr_reader :query
 | 
			
		||||
    attr_reader :opaque
 | 
			
		||||
    attr_reader :fragment
 | 
			
		||||
    attr_reader :parser
 | 
			
		||||
 | 
			
		||||
    def parser
 | 
			
		||||
      if !defined?(@parser) || !@parser
 | 
			
		||||
        DEFAULT_PARSER
 | 
			
		||||
      else
 | 
			
		||||
        @parser || DEFAULT_PARSER
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # replace self by other URI object
 | 
			
		||||
    def replace!(oth)
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +238,7 @@ module URI
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    def check_scheme(v)
 | 
			
		||||
      if v && @parser.regexp[:SCHEME] !~ v
 | 
			
		||||
      if v && parser.regexp[:SCHEME] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected scheme component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -270,7 +277,7 @@ module URI
 | 
			
		|||
 | 
			
		||||
      return v unless v
 | 
			
		||||
 | 
			
		||||
      if @parser.regexp[:USERINFO] !~ v
 | 
			
		||||
      if parser.regexp[:USERINFO] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected userinfo component or user component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +298,7 @@ module URI
 | 
			
		|||
          "password component depends user component"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if @parser.regexp[:USERINFO] !~ v
 | 
			
		||||
      if parser.regexp[:USERINFO] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected user component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +363,7 @@ module URI
 | 
			
		|||
    private :split_userinfo
 | 
			
		||||
 | 
			
		||||
    def escape_userpass(v)
 | 
			
		||||
      v = @parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
 | 
			
		||||
      v = parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
 | 
			
		||||
    end
 | 
			
		||||
    private :escape_userpass
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -384,7 +391,7 @@ module URI
 | 
			
		|||
      if @registry || @opaque
 | 
			
		||||
        raise InvalidURIError,
 | 
			
		||||
          "can not set host with registry or opaque"
 | 
			
		||||
      elsif @parser.regexp[:HOST] !~ v
 | 
			
		||||
      elsif parser.regexp[:HOST] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected host component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -410,7 +417,7 @@ module URI
 | 
			
		|||
      if @registry || @opaque
 | 
			
		||||
        raise InvalidURIError,
 | 
			
		||||
          "can not set port with registry or opaque"
 | 
			
		||||
      elsif !v.kind_of?(Fixnum) && @parser.regexp[:PORT] !~ v
 | 
			
		||||
      elsif !v.kind_of?(Fixnum) && parser.regexp[:PORT] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected port component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -446,7 +453,7 @@ module URI
 | 
			
		|||
      if @host || @port || @user # userinfo = @user + ':' + @password
 | 
			
		||||
        raise InvalidURIError,
 | 
			
		||||
          "can not set registry with host, port, or userinfo"
 | 
			
		||||
      elsif v && @parser.regexp[:REGISTRY] !~ v
 | 
			
		||||
      elsif v && parser.regexp[:REGISTRY] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected registry component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -476,12 +483,12 @@ module URI
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      if @scheme
 | 
			
		||||
        if v && v != '' && @parser.regexp[:ABS_PATH] !~ v
 | 
			
		||||
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v
 | 
			
		||||
          raise InvalidComponentError,
 | 
			
		||||
            "bad component(expected absolute path component): #{v}"
 | 
			
		||||
        end
 | 
			
		||||
      else
 | 
			
		||||
        if v && v != '' && @parser.regexp[:ABS_PATH] !~ v && @parser.regexp[:REL_PATH] !~ v
 | 
			
		||||
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v && parser.regexp[:REL_PATH] !~ v
 | 
			
		||||
          raise InvalidComponentError,
 | 
			
		||||
            "bad component(expected relative path component): #{v}"
 | 
			
		||||
        end
 | 
			
		||||
| 
						 | 
				
			
			@ -513,7 +520,7 @@ module URI
 | 
			
		|||
          "query conflicts with opaque"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if v && v != '' && @parser.regexp[:QUERY] !~ v
 | 
			
		||||
      if v && v != '' && parser.regexp[:QUERY] !~ v
 | 
			
		||||
          raise InvalidComponentError,
 | 
			
		||||
            "bad component(expected query component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -542,7 +549,7 @@ module URI
 | 
			
		|||
      if @host || @port || @user || @path  # userinfo = @user + ':' + @password
 | 
			
		||||
        raise InvalidURIError,
 | 
			
		||||
          "can not set opaque with host, port, userinfo or path"
 | 
			
		||||
      elsif v && @parser.regexp[:OPAQUE] !~ v
 | 
			
		||||
      elsif v && parser.regexp[:OPAQUE] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected opaque component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -565,7 +572,7 @@ module URI
 | 
			
		|||
    def check_fragment(v)
 | 
			
		||||
      return v unless v
 | 
			
		||||
 | 
			
		||||
      if v && v != '' && @parser.regexp[:FRAGMENT] !~ v
 | 
			
		||||
      if v && v != '' && parser.regexp[:FRAGMENT] !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected fragment component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -777,7 +784,7 @@ module URI
 | 
			
		|||
      case oth
 | 
			
		||||
      when Generic
 | 
			
		||||
      when String
 | 
			
		||||
        oth = @parser.parse(oth)
 | 
			
		||||
        oth = parser.parse(oth)
 | 
			
		||||
      else
 | 
			
		||||
        raise ArgumentError,
 | 
			
		||||
          "bad argument(expected URI object or URI string)"
 | 
			
		||||
| 
						 | 
				
			
			@ -848,7 +855,7 @@ module URI
 | 
			
		|||
      case oth
 | 
			
		||||
      when Generic
 | 
			
		||||
      when String
 | 
			
		||||
        oth = @parser.parse(oth)
 | 
			
		||||
        oth = parser.parse(oth)
 | 
			
		||||
      else
 | 
			
		||||
        raise ArgumentError,
 | 
			
		||||
          "bad argument(expected URI object or URI string)"
 | 
			
		||||
| 
						 | 
				
			
			@ -869,7 +876,7 @@ module URI
 | 
			
		|||
      rel = URI::Generic.new(nil, # it is relative URI
 | 
			
		||||
                             self.userinfo, self.host, self.port,
 | 
			
		||||
                             self.registry, self.path, self.opaque,
 | 
			
		||||
                             self.query, self.fragment, @parser)
 | 
			
		||||
                             self.query, self.fragment, parser)
 | 
			
		||||
 | 
			
		||||
      if rel.userinfo != oth.userinfo ||
 | 
			
		||||
          rel.host.to_s.downcase != oth.host.to_s.downcase ||
 | 
			
		||||
| 
						 | 
				
			
			@ -960,7 +967,7 @@ module URI
 | 
			
		|||
      case oth
 | 
			
		||||
      when Generic
 | 
			
		||||
      when String
 | 
			
		||||
        oth = @parser.parse(oth)
 | 
			
		||||
        oth = parser.parse(oth)
 | 
			
		||||
      else
 | 
			
		||||
        raise ArgumentError,
 | 
			
		||||
          "bad argument(expected URI object or URI string)"
 | 
			
		||||
| 
						 | 
				
			
			@ -1059,7 +1066,7 @@ module URI
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    def eql?(oth)
 | 
			
		||||
      @parser == oth.parser &&
 | 
			
		||||
      parser == oth.parser &&
 | 
			
		||||
      self.component_ary.eql?(oth.component_ary)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1117,7 +1124,7 @@ module URI
 | 
			
		|||
    def coerce(oth)
 | 
			
		||||
      case oth
 | 
			
		||||
      when String
 | 
			
		||||
        oth = @parser.parse(oth)
 | 
			
		||||
        oth = parser.parse(oth)
 | 
			
		||||
      else
 | 
			
		||||
        super
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -159,7 +159,7 @@ module URI
 | 
			
		|||
      return true unless v
 | 
			
		||||
      return true if v.size == 0
 | 
			
		||||
 | 
			
		||||
      if @parser.regexp[:OPAQUE] !~ v || /\A#{MAILBOX_PATTERN}*\z/o !~ v
 | 
			
		||||
      if parser.regexp[:OPAQUE] !~ v || /\A#{MAILBOX_PATTERN}*\z/o !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected opaque component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ module URI
 | 
			
		|||
      return true unless v
 | 
			
		||||
      return true if v.size == 0
 | 
			
		||||
 | 
			
		||||
      if @parser.regexp[:OPAQUE] !~ v ||
 | 
			
		||||
      if parser.regexp[:OPAQUE] !~ v ||
 | 
			
		||||
          /\A(#{HEADER_PATTERN}(?:\&#{HEADER_PATTERN})*)\z/o !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected opaque component): #{v}"
 | 
			
		||||
| 
						 | 
				
			
			@ -239,18 +239,18 @@ module URI
 | 
			
		|||
    #   # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
 | 
			
		||||
    #
 | 
			
		||||
    def to_mailtext
 | 
			
		||||
      to = @parser.unescape(@to)
 | 
			
		||||
      to = parser.unescape(@to)
 | 
			
		||||
      head = ''
 | 
			
		||||
      body = ''
 | 
			
		||||
      @headers.each do |x|
 | 
			
		||||
        case x[0]
 | 
			
		||||
        when 'body'
 | 
			
		||||
          body = @parser.unescape(x[1])
 | 
			
		||||
          body = parser.unescape(x[1])
 | 
			
		||||
        when 'to'
 | 
			
		||||
          to << ', ' + @parser.unescape(x[1])
 | 
			
		||||
          to << ', ' + parser.unescape(x[1])
 | 
			
		||||
        else
 | 
			
		||||
          head << @parser.unescape(x[0]).capitalize + ': ' +
 | 
			
		||||
            @parser.unescape(x[1])  + "\n"
 | 
			
		||||
          head << parser.unescape(x[0]).capitalize + ': ' +
 | 
			
		||||
            parser.unescape(x[1])  + "\n"
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue