1
0
mirror of https://github.com/pi-hole/pi-hole synced 2024-12-22 14:58:08 +00:00

Merge pull request #4121 from pi-hole/fix/port_hash

Fix port separator in IPv4 address validation code
This commit is contained in:
Dan Schaper 2021-04-14 13:59:52 -07:00 committed by GitHub
commit 18bedc0493
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 19 deletions

View File

@ -1025,9 +1025,8 @@ valid_ip() {
# Regex matching one IPv4 component, i.e. an integer from 0 to 255. # Regex matching one IPv4 component, i.e. an integer from 0 to 255.
# See https://tools.ietf.org/html/rfc1340 # See https://tools.ietf.org/html/rfc1340
local ipv4elem="(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)"; local ipv4elem="(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)";
# Regex matching an optional port beginning with : from 0 to 65535 # Regex matching an optional port (starting with '#') range of 1-65536
# See https://tools.ietf.org/html/rfc1340#page-33 local portelem="(#(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))?";
local portelem="(:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))?";
# Build a full IPv4 regex from the above subexpressions # Build a full IPv4 regex from the above subexpressions
local regex="^${ipv4elem}\.${ipv4elem}\.${ipv4elem}\.${ipv4elem}${portelem}$" local regex="^${ipv4elem}\.${ipv4elem}\.${ipv4elem}\.${ipv4elem}${portelem}$"
@ -1046,8 +1045,8 @@ valid_ip6() {
local ipv6elem="[0-9a-fA-F]{1,4}" local ipv6elem="[0-9a-fA-F]{1,4}"
# Regex matching an IPv6 CIDR, i.e. 1 to 128 # Regex matching an IPv6 CIDR, i.e. 1 to 128
local v6cidr="(\\/([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])){0,1}" local v6cidr="(\\/([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])){0,1}"
# Regex matching an optional port beginning with # matching optional port number starting '#' with range of 1-65536 # Regex matching an optional port (starting with '#') range of 1-65536
local portelem="(#([1-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9]|[1-8][0-9]{3}|9[0-8][0-9]{2}|99[0-8][0-9]|999[0-9]|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-6]))?" local portelem="(#(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))?";
# Build a full IPv6 regex from the above subexpressions # Build a full IPv6 regex from the above subexpressions
local regex="^(((${ipv6elem}))*((:${ipv6elem}))*::((${ipv6elem}))*((:${ipv6elem}))*|((${ipv6elem}))((:${ipv6elem})){7})${v6cidr}${portelem}$" local regex="^(((${ipv6elem}))*((:${ipv6elem}))*::((${ipv6elem}))*((:${ipv6elem}))*|((${ipv6elem}))((:${ipv6elem})){7})${v6cidr}${portelem}$"

View File

@ -546,23 +546,23 @@ def test_validate_ip(Pihole):
test_address('256.255.255.255', False) test_address('256.255.255.255', False)
test_address('1092.168.1.1', False) test_address('1092.168.1.1', False)
test_address('not an IP', False) test_address('not an IP', False)
test_address('8.8.8.8:', False) test_address('8.8.8.8#', False)
test_address('8.8.8.8:0') test_address('8.8.8.8#0')
test_address('8.8.8.8:1') test_address('8.8.8.8#1')
test_address('8.8.8.8:42') test_address('8.8.8.8#42')
test_address('8.8.8.8:888') test_address('8.8.8.8#888')
test_address('8.8.8.8:1337') test_address('8.8.8.8#1337')
test_address('8.8.8.8:65535') test_address('8.8.8.8#65535')
test_address('8.8.8.8:65536', False) test_address('8.8.8.8#65536', False)
test_address('8.8.8.8:-1', False) test_address('8.8.8.8#-1', False)
test_address('00.0.0.0', False) test_address('00.0.0.0', False)
test_address('010.0.0.0', False) test_address('010.0.0.0', False)
test_address('001.0.0.0', False) test_address('001.0.0.0', False)
test_address('0.0.0.0:00', False) test_address('0.0.0.0#00', False)
test_address('0.0.0.0:01', False) test_address('0.0.0.0#01', False)
test_address('0.0.0.0:001', False) test_address('0.0.0.0#001', False)
test_address('0.0.0.0:0001', False) test_address('0.0.0.0#0001', False)
test_address('0.0.0.0:00001', False) test_address('0.0.0.0#00001', False)
def test_os_check_fails(Pihole): def test_os_check_fails(Pihole):