Skip to content

Commit d3d13e7

Browse files
committed
Limit allowed IP address characters
Fixes a new test failure from: json-schema-org/JSON-Schema-Test-Suite#420 `IPAddr` allows passing netmask, which we don't want.
1 parent f2d1c3c commit d3d13e7

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

lib/json_schemer/format.rb

+8-7
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ module Format
99
JSON_POINTER_REGEX = /\A#{JSON_POINTER_REGEX_STRING}\z/.freeze
1010
RELATIVE_JSON_POINTER_REGEX = /\A(0|[1-9]\d*)(#|#{JSON_POINTER_REGEX_STRING})?\z/.freeze
1111
DATE_TIME_OFFSET_REGEX = /(Z|[\+\-]([01][0-9]|2[0-3]):[0-5][0-9])\z/i.freeze
12-
INVALID_QUERY_REGEX = /[[:space:]]/.freeze
12+
IP_REGEX = /\A[\h:.]+\z/.freeze
13+
INVALID_QUERY_REGEX = /\s/.freeze
1314

1415
def valid_spec_format?(data, format)
1516
case format
@@ -28,9 +29,9 @@ def valid_spec_format?(data, format)
2829
when 'idn-hostname'
2930
valid_hostname?(data)
3031
when 'ipv4'
31-
valid_ip?(data, :v4)
32+
valid_ip?(data, Socket::AF_INET)
3233
when 'ipv6'
33-
valid_ip?(data, :v6)
34+
valid_ip?(data, Socket::AF_INET6)
3435
when 'uri'
3536
valid_uri?(data)
3637
when 'uri-reference'
@@ -72,10 +73,10 @@ def valid_hostname?(data)
7273
HOSTNAME_REGEX.match?(data) && data.split('.').all? { |label| label.size <= 63 }
7374
end
7475

75-
def valid_ip?(data, type)
76-
ip_address = IPAddr.new(data)
77-
type == :v4 ? ip_address.ipv4? : ip_address.ipv6?
78-
rescue IPAddr::InvalidAddressError
76+
def valid_ip?(data, family)
77+
IPAddr.new(data, family)
78+
IP_REGEX.match?(data)
79+
rescue IPAddr::Error
7980
false
8081
end
8182

0 commit comments

Comments
 (0)