{"record":{"id":"85f9d850cd2afe35","repo":"alibaba/nacos","slug":"ip-and-port-string-cannot-be-empty","errorCode":null,"errorMessage":"ip and port string cannot be empty!","messagePattern":"ip and port string cannot be empty!","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"common/src/main/java/com/alibaba/nacos/common/utils/InternetAddressUtil.java","lineNumber":137,"sourceCode":"     * Check if the address contains a port. 2020/9/3 14:53\n     *\n     * @param address address string\n     * @return boolean\n     */\n    public static boolean containsPort(String address) {\n        return splitIpPortStr(address).length == SPLIT_IP_PORT_RESULT_LENGTH;\n    }\n    \n    /**\n     * Split IP and port strings, support IPv4 and IPv6, IP in IPv6 must be enclosed with []. Illegal IP will get\n     * abnormal results.\n     *\n     * @param str ip and port string\n     * @return java.lang.String[]\n     */\n    public static String[] splitIpPortStr(String str) {\n        if (StringUtils.isBlank(str)) {\n            throw new IllegalArgumentException(\"ip and port string cannot be empty!\");\n        }\n        String[] serverAddrArr;\n        if (str.startsWith(IPV6_START_MARK) && StringUtils.containsIgnoreCase(str, IPV6_END_MARK)) {\n            if (str.endsWith(IPV6_END_MARK)) {\n                serverAddrArr = new String[1];\n                serverAddrArr[0] = str;\n            } else {\n                serverAddrArr = new String[2];\n                serverAddrArr[0] = str.substring(0, (str.indexOf(IPV6_END_MARK) + 1));\n                serverAddrArr[1] = str.substring((str.indexOf(IPV6_END_MARK) + 2));\n            }\n        } else {\n            serverAddrArr = str.split(IP_PORT_SPLITER);\n        }\n        return serverAddrArr;\n    }\n    \n    /**","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/common/src/main/java/com/alibaba/nacos/common/utils/InternetAddressUtil.java#L119-L155","documentation":"Thrown by InternetAddressUtil.splitIpPortStr(String) when the input address string is blank. The splitter is the foundation for parsing server addresses (host:port) supporting IPv4 and IPv6, and a blank input is treated as an illegal argument rather than an empty result.","triggerScenarios":"Parsing a server address list where one entry is empty — e.g., 'a.com:8848,,b.com:8848' splits into a blank token; or the entire address property is unset/blank.","commonSituations":"Malformed server-addr configuration (trailing comma, double comma); a cluster member list with an empty entry; reading an address from a config/environment variable that was not set.","solutions":["Sanitize the address list: split on the list delimiter, trim, and filter blanks before parsing each entry.","Validate the serverAddr / member-list config value at startup.","Reject empty tokens explicitly with a clearer error before reaching splitIpPortStr."],"exampleFix":"// before\nfor (String addr : serverList.split(\",\")) {\n    String[] parts = InternetAddressUtil.splitIpPortStr(addr);\n}\n\n// after\nfor (String addr : serverList.split(\",\")) {\n    String trimmed = addr.trim();\n    if (trimmed.isEmpty()) continue;\n    String[] parts = InternetAddressUtil.splitIpPortStr(trimmed);\n}","handlingStrategy":"validation","validationCode":"for (String addr : serverList.split(\",\")) {\n    String trimmed = addr.trim();\n    if (trimmed.isEmpty()) continue; // skip blank entries\n    String[] parts = InternetAddressUtil.splitIpPortStr(trimmed);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Trim and drop blank tokens from comma-separated address lists before parsing.","Validate server-addr / member-list config at startup."],"tags":["network","address-parsing","validation","configuration","ipv6"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}