Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #9479: action_controller_request_treats_dotted_quad_correctly.patch

File action_controller_request_treats_dotted_quad_correctly.patch, 2.3 kB (added by purp, 1 year ago)

Tests and code

  • actionpack/test/controller/request_test.rb

    old new  
    5151    @request.host = "192.168.1.200" 
    5252    assert_nil @request.domain 
    5353 
     54    @request.host = "foo.192.168.1.200" 
     55    assert_nil @request.domain 
     56 
     57    @request.host = "192.168.1.200.com" 
     58    assert_equal "200.com", @request.domain 
     59 
    5460    @request.host = nil 
    5561    assert_nil @request.domain 
    5662  end 
     
    6874    @request.host = "foobar.foobar.com" 
    6975    assert_equal %w( foobar ), @request.subdomains 
    7076 
     77    @request.host = "192.168.1.200" 
     78    assert_equal [], @request.subdomains 
     79 
     80    @request.host = "foo.192.168.1.200" 
     81    assert_equal [], @request.subdomains 
     82 
     83    @request.host = "192.168.1.200.com" 
     84    assert_equal %w( 192 168 1 ), @request.subdomains 
     85 
    7186    @request.host = nil 
    7287    assert_equal [], @request.subdomains 
    7388  end 
  • actionpack/lib/action_controller/request.rb

    old new  
    172172    # Returns the domain part of a host, such as rubyonrails.org in "www.rubyonrails.org". You can specify 
    173173    # a different <tt>tld_length</tt>, such as 2 to catch rubyonrails.co.uk in "www.rubyonrails.co.uk". 
    174174    def domain(tld_length = 1) 
    175       return nil if !/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.match(host).nil? or host.nil? 
     175      return nil unless named_host?(host) 
    176176 
    177177      host.split('.').last(1 + tld_length).join('.') 
    178178    end 
     
    181181    # You can specify a different <tt>tld_length</tt>, such as 2 to catch ["www"] instead of ["www", "rubyonrails"] 
    182182    # in "www.rubyonrails.co.uk". 
    183183    def subdomains(tld_length = 1) 
    184       return [] unless host 
     184      return [] unless named_host?(host) 
    185185      parts = host.split('.') 
    186186      parts[0..-(tld_length+2)] 
    187187    end 
     
    353353          "backtrace" => e.backtrace } 
    354354      end 
    355355 
     356      def named_host?(host) 
     357        !(host.nil? || /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.match(host)) 
     358      end 
     359 
    356360    class << self 
    357361      def parse_query_parameters(query_string) 
    358362        return {} if query_string.blank?