{"record":{"id":"bdd299e811f38cff","repo":"zeroclaw-labs/zeroclaw","slug":"url-cannot-be-empty","errorCode":null,"errorMessage":"URL cannot be empty","messagePattern":"URL cannot be empty","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-tools/src/browser.rs","lineNumber":442,"sourceCode":"                if let Some(err) = computer_use_err {\n                    anyhow::bail!(\n                        \"browser.backend='auto' needs agent-browser CLI, browser-native, or valid computer-use sidecar (error: {err})\"\n                    );\n                }\n\n                anyhow::bail!(\n                    \"browser.backend='auto' needs agent-browser CLI, browser-native, or computer-use sidecar\"\n                )\n            }\n        }\n    }\n\n    /// Validate URL against allowlist\n    fn validate_url(&self, url: &str) -> anyhow::Result<()> {\n        let url = url.trim();\n\n        if url.is_empty() {\n            anyhow::bail!(\"URL cannot be empty\");\n        }\n\n        // Block file:// URLs — browser file access bypasses all SSRF and\n        // domain-allowlist controls and can exfiltrate arbitrary local files.\n        if url.starts_with(\"file://\") {\n            anyhow::bail!(\"file:// URLs are not allowed in browser automation\");\n        }\n\n        if !url.starts_with(\"https://\") && !url.starts_with(\"http://\") {\n            anyhow::bail!(\"Only http:// and https:// URLs are allowed\");\n        }\n\n        let parsed = reqwest::Url::parse(url)\n            .map_err(|e| anyhow::Error::msg(format!(\"Invalid URL format: {e}\")))?;\n\n        if !parsed.username().is_empty() || parsed.password().is_some() {\n            anyhow::bail!(\"URL userinfo is not allowed\");\n        }","sourceCodeStart":424,"sourceCodeEnd":460,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-tools/src/browser.rs#L424-L460","documentation":"Error \"URL cannot be empty\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-tools/src/browser.rs:442 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a non-empty URL."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}