Kuberwastaken/claurst · error

Absolute Windows paths not allowed

Error message

Absolute Windows paths not allowed: {:?}

What it means

Path-security guard in validate_memory_path: the key matches the Windows drive-absolute pattern — an ASCII letter followed by ':' (e.g. `C:`) — so it would resolve to a filesystem root outside the team-memory directory. The formatted value is the offending path.

Solutions

  1. Remove the drive prefix; keys must be relative paths under the memory directory
  2. Re-create the entry with a platform-neutral relative key
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src-rust/crates/core/src/team_memory_sync.rs:101 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Kuberwastaken/claurst@b0637c97ec (2026-09-10). Data as JSON: /api/errors/a5ac7dbedd8e1f44. Report an issue: GitHub.

Appendix: source

Thrown at src-rust/crates/core/src/team_memory_sync.rs:101

    if path.contains('\0') {
        anyhow::bail!("Path contains null bytes: {:?}", path);
    }
    let lower = path.to_ascii_lowercase();
    if lower.contains("%2e") || lower.contains("%2f") {
        anyhow::bail!("Path contains URL-encoded traversal sequences: {:?}", path);
    }
    if path.contains('\\') {
        anyhow::bail!("Path contains backslashes: {:?}", path);
    }
    if path.starts_with('/') {
        anyhow::bail!("Absolute Unix paths not allowed: {:?}", path);
    }
    // Windows-style absolute path: e.g. "C:" or "c:"
    if path.len() >= 2 {
        let mut chars = path.chars();
        let first = chars.next().unwrap();
        if first.is_ascii_alphabetic() && chars.next() == Some(':') {
            anyhow::bail!("Absolute Windows paths not allowed: {:?}", path);
        }
    }
    if path.split('/').any(|component| component == "..") {
        anyhow::bail!("Path traversal not allowed: {:?}", path);
    }
    Ok(())
}

// ---------------------------------------------------------------------------
// TeamMemorySync
// ---------------------------------------------------------------------------

/// Drives pull and push against the claude.ai team-memory API.
pub struct TeamMemorySync {
    /// Base URL of the API, e.g. `"https://claude.ai"`.
    api_base: String,
    /// Repo identifier sent as a query parameter.
    repo: String,

View on GitHub (pinned to b0637c97ec)