{"record":{"id":"f4c5a8ea86dd2a1f","repo":"Hmbown/CodeWhale","slug":"external-credential-path-contains-reparse-point","errorCode":null,"errorMessage":"external credential path contains reparse point {}","messagePattern":"external credential path contains reparse point (.+?)","errorType":"exception","errorClass":"std::io::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/external_credentials.rs","lineNumber":626,"sourceCode":"}\n\n#[cfg(windows)]\nfn reject_windows_reparse_components(path: &Path) -> io::Result<()> {\n    use std::os::windows::fs::MetadataExt;\n    use windows_sys::Win32::Storage::FileSystem::FILE_ATTRIBUTE_REPARSE_POINT;\n\n    let mut current = std::path::PathBuf::new();\n    for component in path.components() {\n        current.push(component.as_os_str());\n        if matches!(\n            component,\n            std::path::Component::Prefix(_) | std::path::Component::RootDir\n        ) {\n            continue;\n        }\n        let metadata = std::fs::symlink_metadata(&current)?;\n        if metadata.file_attributes() & FILE_ATTRIBUTE_REPARSE_POINT != 0 {\n            return Err(io::Error::new(\n                io::ErrorKind::PermissionDenied,\n                format!(\n                    \"external credential path contains reparse point {}\",\n                    codewhale_config::quote_os_path(&current)\n                ),\n            ));\n        }\n    }\n    Ok(())\n}\n\n#[cfg(not(any(unix, windows)))]\nfn open_secure_regular_file(_path: &Path, _require_owner_only: bool) -> io::Result<File> {\n    Err(io::Error::new(\n        io::ErrorKind::Unsupported,\n        \"secure external credential reads are unsupported on this platform\",\n    ))\n}","sourceCodeStart":608,"sourceCodeEnd":644,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/external_credentials.rs#L608-L644","documentation":"Path-walk guard in reject_windows_reparse_components: while walking each path component, symlink_metadata reported FILE_ATTRIBUTE_REPARSE_POINT, meaning some component (directory or file) in the credential path is a symlink/junction/mount point. Credential paths must be plain directories to avoid link-based redirection.","triggerScenarios":"Thrown at crates/tui/src/external_credentials.rs:626 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove or rename the symlink/junction component so the credential path is composed of real directories.","Point configuration at the real (non-reparse) location of the credential directory.","Avoid placing credential stores inside synced/virtualized folders that use reparse points."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}