From 8090071effa7534ed6c985e8ebee666a4aae1f6d Mon Sep 17 00:00:00 2001 From: jbzdarkid Date: Wed, 17 Mar 2021 18:09:03 -0700 Subject: [PATCH] Update regex to disallow leading zeros Also updated a comment to point to a non-experimental RFC. Signed-off-by: jbzdarkid --- automated install/basic-install.sh | 8 +++++--- test/test_automated_install.py | 8 ++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 4c9352b8..78bc0882 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -1018,9 +1018,11 @@ valid_ip() { local stat=1 # Regex matching one IPv4 component, i.e. an integer from 0 to 255. - local ipv4elem="(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})"; - # Regex matching an optional port beginning with # matching optional port number starting '#' with range of 1 to 65536 - 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}|[0-9]{1,4}))?"; + # 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)"; + # Regex matching an optional port beginning with : from 0 to 65535 + # 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))?"; # Build a full IPv4 regex from the above subexpressions local regex="^${ipv4elem}\.${ipv4elem}\.${ipv4elem}\.${ipv4elem}${portelem}$" diff --git a/test/test_automated_install.py b/test/test_automated_install.py index 20dadc26..1266f46b 100644 --- a/test/test_automated_install.py +++ b/test/test_automated_install.py @@ -555,6 +555,14 @@ def test_validate_ip(Pihole): test_address('8.8.8.8:65535') test_address('8.8.8.8:65536', False) test_address('8.8.8.8:-1', False) + test_address('00.0.0.0', False) + test_address('010.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:01', False) + test_address('0.0.0.0:001', False) + test_address('0.0.0.0:0001', False) + test_address('0.0.0.0:00001', False) def test_os_check_fails(Pihole):