{"record":{"id":"7d10d65de7c84936","repo":"tinyhumansai/openhuman","slug":"dns-resolution-returned-no-addresses-for-host","errorCode":null,"errorMessage":"DNS resolution returned no addresses for '{host}'","messagePattern":"DNS resolution returned no addresses for '(.+?)'","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/tools/impl/network/url_guard.rs","lineNumber":131,"sourceCode":"    F: FnOnce(String, u16) -> Fut,\n    Fut: Future<Output = anyhow::Result<Vec<IpAddr>>>,\n{\n    let url = validate_url(raw_url, allowed_domains)?;\n\n    let host = extract_host(&url)?;\n\n    // If the host is already a valid IP literal, `is_private_or_local_host`\n    // has already checked it above. We only need DNS resolution for hostnames.\n    if host.parse::<std::net::IpAddr>().is_ok() {\n        return Ok(url);\n    }\n\n    let port = extract_port(&url)?;\n    log::debug!(\"[url_guard] resolving DNS for host={host} port={port}\");\n    let addrs = resolver(host.clone(), port).await?;\n\n    if addrs.is_empty() {\n        anyhow::bail!(\"DNS resolution returned no addresses for '{host}'\");\n    }\n\n    log::debug!(\"[url_guard] DNS resolved host={host} addrs={}\", addrs.len());\n\n    for addr in &addrs {\n        let ip_str = addr.to_string();\n        if is_private_or_local_host(&ip_str) {\n            log::debug!(\"[url_guard] DNS rebinding blocked host={host} resolved_ip={ip_str}\");\n            anyhow::bail!(\n                \"DNS rebinding blocked: '{host}' resolved to private/local address {ip_str}\"\n            );\n        }\n    }\n\n    Ok(url)\n}\n\nasync fn resolve_host_ips(host: String, port: u16) -> anyhow::Result<Vec<IpAddr>> {","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/tools/impl/network/url_guard.rs#L113-L149","documentation":"The DNS-rebinding check resolved the hostname successfully but the resolver returned an empty address list, so there is no IP to re-validate and the request cannot proceed safely.","triggerScenarios":"Thrown at src/openhuman/tools/impl/network/url_guard.rs:131 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the hostname actually resolves (dig/nslookup) from this machine","Fix or wait out broken DNS on the host, then retry","Use a hostname with valid A/AAAA records"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}