{"record":{"id":"5dd8b17cce06fdd0","repo":"zed-industries/zed","slug":"invalid-binary-file-name-file-name","errorCode":null,"errorMessage":"invalid binary file name: {file_name}","messagePattern":"invalid binary file name: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/project/src/agent_server_store.rs","lineNumber":961,"sourceCode":"        bail!(\"unsupported archive type {suffix} in URL: {archive_url}\");\n    } else {\n        let file_name = raw_binary_file_name(&archive_path)\n            .with_context(|| format!(\"determining binary file name from URL: {archive_url}\"))?;\n        Ok(RegistryArchiveKind::RawBinary { file_name })\n    }\n}\n\nfn raw_binary_file_name(archive_path: &str) -> Result<String> {\n    let last_segment = archive_path\n        .rsplit('/')\n        .next()\n        .filter(|segment| !segment.is_empty())\n        .context(\"URL has no file name\")?;\n    let file_name = percent_decode_str(last_segment)\n        .decode_utf8()\n        .context(\"file name is not valid UTF-8\")?\n        .into_owned();\n    anyhow::ensure!(\n        !file_name.is_empty()\n            && file_name != \".\"\n            && file_name != \"..\"\n            && !file_name.contains(['/', '\\\\'])\n            && !file_name.contains('\\0'),\n        \"invalid binary file name: {file_name}\"\n    );\n    Ok(file_name)\n}\n\nstruct GithubReleaseArchive {\n    repo_name_with_owner: String,\n    tag: String,\n    asset_name: String,\n}\n\nfn github_release_archive_from_url(archive_url: &str) -> Option<GithubReleaseArchive> {\n    fn decode_path_segment(segment: &str) -> Option<String> {","sourceCodeStart":943,"sourceCodeEnd":979,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/project/src/agent_server_store.rs#L943-L979","documentation":"After percent-decoding the last URL segment intended as the raw binary file name, the result failed validation (empty or containing path separators), so it cannot be used as a safe file name during download and extraction of a raw-binary registry artifact.","triggerScenarios":"Thrown at crates/project/src/agent_server_store.rs:961 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the registry entry's download URL so its final segment is a plain file name","Sanitize or reject the decoded name before it reaches this validation if URLs can be user-supplied"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}