{"record":{"id":"b72951735b849c29","repo":"sgl-project/sglang","slug":"invalid-ipv6-address-inside-brackets-host-r","errorCode":null,"errorMessage":"Invalid IPv6 address inside brackets: {host!r}","messagePattern":"Invalid IPv6 address inside brackets: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/utils/network.py","lineNumber":535,"sourceCode":"            my-hostname:8000    → NetworkAddress(\"my-hostname\", 8000)\n\n        IPv6 addresses **must** be bracketed.  Bare ``::1:8000`` is\n        ambiguous and will raise ``ValueError``.\n\n        Raises:\n            ValueError: If the string cannot be unambiguously parsed.\n        \"\"\"\n        if not addr:\n            raise ValueError(\"Empty address string\")\n\n        # --- Bracketed IPv6: [addr]:port ---\n        if addr.startswith(\"[\"):\n            close = addr.find(\"]\")\n            if close == -1:\n                raise ValueError(f\"Missing closing bracket in IPv6 address: {addr!r}\")\n            host = addr[1:close]\n            if not _is_ipv6(host):\n                raise ValueError(f\"Invalid IPv6 address inside brackets: {host!r}\")\n            rest = addr[close + 1 :]\n            if not rest.startswith(\":\") or len(rest) < 2:\n                raise ValueError(\n                    f\"Expected ':port' after closing bracket, got: {rest!r}\"\n                )\n            return NetworkAddress(host, _parse_port(rest[1:]))\n\n        # --- Plain host:port (IPv4 / hostname) ---\n        if \":\" not in addr:\n            raise ValueError(f\"Missing port in address (expected host:port): {addr!r}\")\n        host, port_str = addr.rsplit(\":\", 1)\n        if not host:\n            raise ValueError(f\"Empty host in address: {addr!r}\")\n        # Guard against bare IPv6 slipping through\n        if \":\" in host and _is_ipv6(host):\n            raise ValueError(\n                f\"Bare IPv6 address without brackets is ambiguous: {addr!r}. \"\n                f\"Use [{host}]:{port_str} instead.\"","sourceCodeStart":517,"sourceCodeEnd":553,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/utils/network.py#L517-L553","documentation":"Raised by NetworkAddress.parse when an address string uses bracket syntax ([host]:port) but the text inside the brackets is not a valid IPv6 address (checked with the ipaddress module). The parser requires bracketed hosts to be IPv6 literals, since brackets exist solely to disambiguate colons in IPv6.","triggerScenarios":"Calling NetworkAddress.parse('[not-an-ipv6]:8080'), passing an IPv4 like '[127.0.0.1]:8080', or a hostname in brackets like '[myhost]:9000'.","commonSituations":"Constructing worker/zookeeper/NCCL addresses from config strings where a user wrapped a plain hostname or IPv4 in brackets, misunderstanding that brackets are IPv6-only syntax.","solutions":["Remove the brackets if the host is an IPv4 or hostname: '10.0.0.1:8080'","Use a full valid IPv6 literal inside brackets: '[::1]:8080' or '[2001:db8::1]:8080'","Abbreviate but keep the IPv6 valid, e.g. '[::]:8080' for all interfaces"],"exampleFix":"# before\naddr = NetworkAddress.parse('[myhost]:8080')  # ValueError\n# after\naddr = NetworkAddress.parse('myhost:8080')","handlingStrategy":"validation","validationCode":"import ipaddress\ndef valid_bracketed_host(addr: str) -> bool:\n    if not addr.startswith('['):\n        return True\n    host = addr[1:addr.find(']')] if ']' in addr else None\n    try:\n        ipaddress.IPv6Address(host or '')\n        return True\n    except ipaddress.AddressValueError:\n        return False","typeGuard":"def is_parseable_address(addr: str) -> bool:\n    import ipaddress\n    if addr.startswith('['):\n        if ']' not in addr:\n            return False\n        try:\n            ipaddress.IPv6Address(addr[1:addr.index(']')])\n        except ValueError:\n            return False\n    return ':' in addr","tryCatchPattern":"try:\n    addr = NetworkAddress.parse(s)\nexcept ValueError as e:\n    logger.warning('bad address %r: %s', s, e); raise ConfigError(s) from e","preventionTips":["Use brackets only for IPv6 literals","Normalize addresses in one config-loading helper that validates before parse","Add unit tests covering ipv4, hostname, and [ipv6]:port forms"],"tags":["network","ipv6","address-parsing","sglang"],"backgroundTag":"invalid-host-port-format","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}