diff --git a/src/validators/hostname.py b/src/validators/hostname.py index bdf6bdb..1c4f603 100644 --- a/src/validators/hostname.py +++ b/src/validators/hostname.py @@ -114,6 +114,8 @@ def hostname( return False if may_have_port and (host_seg := _port_validator(value)): + if len(host_seg) > 253: + return False return ( (_simple_hostname_regex().match(host_seg) if maybe_simple else False) or domain(host_seg, consider_tld=consider_tld, rfc_1034=rfc_1034, rfc_2782=rfc_2782) @@ -121,6 +123,9 @@ def hostname( or (False if skip_ipv6_addr else ipv6(host_seg, cidr=False)) ) + if len(value) > 253: + return False + return ( (_simple_hostname_regex().match(value) if maybe_simple else False) or domain(value, consider_tld=consider_tld, rfc_1034=rfc_1034, rfc_2782=rfc_2782) diff --git a/tests/test_hostname.py b/tests/test_hostname.py index 6ff4040..fde616c 100644 --- a/tests/test_hostname.py +++ b/tests/test_hostname.py @@ -40,6 +40,16 @@ def test_returns_true_on_valid_hostname(value: str, rfc_1034: bool, rfc_2782: bo @pytest.mark.parametrize( ("value", "rfc_1034", "rfc_2782"), [ + # bad (hostname exceeding 253 chars) + ( + "kld8MXQh6YalMqKRbfs895gMjW5T4p2EwToPoCSThPHHbXgmXc." + "kld8MXQh6YalMqKRbfs895gMjW5T4p2EwToPoCSThPHHbXgmXc." + "kld8MXQh6YalMqKRbfs895gMjW5T4p2EwToPoCSThPHHbXgmXc." + "kld8MXQh6YalMqKRbfs895gMjW5T4p2EwToPoCSThPHHbXgmXc." + "kld8MXQh6YalMqKRbfs895gMjW5T4p2EwToPoCSThPHHbXgmXcab", + False, + False, + ), # bad (simple hostname w/ optional ports) ("ubuntu-pc:443080", False, False), ("this-pc-is-sh*t", False, False),