Skip to content

Commit

Permalink
Move the host request parsing to a separate method. (#85)
Browse files Browse the repository at this point in the history
Allows for someone to override the parsing to accommodate "alternatives".
One could write the following to allow underscores in host names.

require 'webrick/httprequest'

module WEBrick
  class HTTPRequest
    private

    def parse_host_request_line(host, scheme)
      uri = URI.parse("#{scheme}://#{host}")
      [uri.host, uri.port]
    end
  end
end

Also adding the "o" option to the regex so the regex is only built once.
  • Loading branch information
wishdev authored Jan 26, 2023
1 parent d42c291 commit e457003
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/webrick/httprequest.rb
Original file line number Diff line number Diff line change
Expand Up @@ -491,8 +491,7 @@ def parse_uri(str, scheme="http")
if @forwarded_host
host, port = @forwarded_host, @forwarded_port
elsif self["host"]
pattern = /\A(#{URI::REGEXP::PATTERN::HOST})(?::(\d+))?\z/n
host, port = *self['host'].scan(pattern)[0]
host, port = parse_host_request_line(self["host"])
elsif @addr.size > 0
host, port = @addr[2], @addr[1]
else
Expand All @@ -504,6 +503,11 @@ def parse_uri(str, scheme="http")
return URI::parse(uri.to_s)
end

def parse_host_request_line(host)
pattern = /\A(#{URI::REGEXP::PATTERN::HOST})(?::(\d+))?\z/no
host.scan(pattern)[0]
end

def read_body(socket, block)
return unless socket
if tc = self['transfer-encoding']
Expand Down

0 comments on commit e457003

Please sign in to comment.