{"record":{"id":"867b5336a42d3258","repo":"sgl-project/sglang","slug":"empty-address-string","errorCode":null,"errorMessage":"Empty address string","messagePattern":"Empty address string","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/utils/network.py","lineNumber":526,"sourceCode":"\n    @staticmethod\n    def parse(addr: str) -> NetworkAddress:\n        \"\"\"Parse a ``host:port`` string into a ``NetworkAddress``.\n\n        Accepted formats::\n\n            [::1]:8000          → NetworkAddress(\"::1\", 8000)\n            127.0.0.1:8000      → NetworkAddress(\"127.0.0.1\", 8000)\n            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:","sourceCodeStart":508,"sourceCodeEnd":544,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/utils/network.py#L508-L544","documentation":"NetworkAddress.parse requires a non-empty address string; an empty/whitespace input (or None coerced to '') raises ValueError('Empty address string') before any parsing branch runs.","triggerScenarios":"parse(\"\") or parse(os.environ.get(\"SGLANG_ADDR\", \"\")) where the env var is unset/empty.","commonSituations":"Optional env vars not set and defaults wired as empty strings; templated config producing blank endpoints.","solutions":["Default the value before parsing: addr_str or \"127.0.0.1:0\".","Fail fast on missing config at startup with a clear message.","Trim/validate config strings before reaching parse."],"exampleFix":"# before\nNetworkAddress.parse(os.environ.get(\"DIST_ADDR\", \"\"))\n\n# after\nNetworkAddress.parse(os.environ.get(\"DIST_ADDR\") or \"127.0.0.1:8000\")","handlingStrategy":"validation","validationCode":"addr = (os.environ.get(\"DIST_ADDR\") or \"\").strip()\nif not addr:\n    raise SystemExit(\"DIST_ADDR is required\")","typeGuard":"def is_nonempty_addr(s) -> bool:\n    return isinstance(s, str) and bool(s.strip())","tryCatchPattern":null,"preventionTips":["Default optional address env vars at one place in startup code."],"tags":["network","parsing","validation"],"backgroundTag":"empty-configuration-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}