Skip to content

Commit 57e408c

Browse files
committed
validate dns names too
1 parent 01a1b20 commit 57e408c

File tree

1 file changed

+15
-21
lines changed

1 file changed

+15
-21
lines changed

lib/webmachine/request.rb

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ def method_missing(m, *args, &block)
3434
if m =~ HTTP_HEADERS_MATCH
3535
# Access headers more easily as underscored methods.
3636
header_name = m.to_s.tr(UNDERSCORE, DASH)
37-
if (header_value = headers[header_name])
37+
if (header_value = @headers[header_name])
3838
# Make future lookups faster.
3939
self.class.class_eval <<-RUBY, __FILE__, __LINE__
4040
def #{m}
41-
headers["#{header_name}"]
41+
@headers["#{header_name}"]
4242
end
4343
RUBY
4444
end
@@ -167,39 +167,33 @@ def options?
167167
private
168168

169169
IPV6_MATCH = /\A\[(?<address> .* )\]:(?<port> \d+ )\z/x.freeze # string like "[::1]:80"
170-
IPV4_MATCH = /\A(?<address> [^:]+ ):(?<port> \d+ )\z/x.freeze # string like "127.0.0.1:80"
170+
HOST_MATCH = /\A(?<host> [^:]+ ):(?<port> \d+ )\z/x.freeze # string like "www.example.com:80"
171171

172-
def parse_addr(string)
172+
def parse_host(uri, host_string)
173173
# Split host and port number from string.
174-
case string
174+
case host_string
175175
when IPV6_MATCH
176-
address = $~[:address]
177-
port = $~[:port]
178-
when IPV4_MATCH
179-
address = $~[:address]
180-
port = $~[:port]
176+
uri.host = IPAddr.new($~[:address]).to_s
177+
uri.port = $~[:port].to_i
178+
when HOST_MATCH
179+
uri.host = $~[:host]
180+
uri.port = $~[:port].to_i
181181
else # string with no port number
182-
address = string
183-
port = nil
182+
uri.host = host_string
184183
end
185184

186-
# Pass address, port to Addrinfo.tcp. It will raise SocketError if address or port is not valid.
187-
[IPAddr.new(address).to_s, port.to_i]
185+
uri
188186
end
189187

190188
def build_uri(uri, headers)
191189
uri = URI(uri)
190+
uri.port ||= 80
191+
uri.scheme ||= HTTP
192192
if uri.host
193193
return uri
194194
end
195195

196-
addr, port = parse_addr(headers.fetch(HOST))
197-
198-
uri.scheme = HTTP
199-
uri.host = addr
200-
uri.port = port == 0 ? 80 : port
201-
202-
uri
196+
parse_host(uri, headers.fetch(HOST))
203197
end
204198

205199
end # class Request

0 commit comments

Comments
 (0)