jdx/mise · error

registry archive is too large

Error message

registry archive is too large

What it means

mise accumulates the total uncompressed size of all registry archive entries and enforces MAX_REGISTRY_ARCHIVE_SIZE. When the running sum exceeds the cap, parsing aborts. Together with the per-entry and per-count caps this bounds the worst-case cost of parsing an untrusted archive.

Source

Thrown at src/registry.rs:383

}

fn track_registry_archive_entry(
    index: usize,
    entry_size: u64,
    archive_size: &mut u64,
) -> Result<()> {
    ensure!(
        index < MAX_REGISTRY_ARCHIVE_ENTRIES,
        "registry archive contains too many entries"
    );
    ensure!(
        entry_size <= MAX_REGISTRY_ARCHIVE_ENTRY_SIZE,
        "registry archive entry is too large"
    );
    *archive_size = archive_size
        .checked_add(entry_size)
        .ok_or_else(|| eyre::eyre!("registry archive size overflow"))?;
    ensure!(
        *archive_size <= MAX_REGISTRY_ARCHIVE_SIZE,
        "registry archive is too large"
    );
    Ok(())
}

fn registry_from_sources(sources: BTreeMap<String, String>) -> Result<Registry> {
    let mut entries = BTreeMap::new();
    let mut missing_version_order = false;
    for (short, source) in sources {
        let value: toml::Value = toml::from_str(&source)
            .wrap_err_with(|| format!("failed to parse registry/{short}.toml"))?;
        let (tool, tool_missing_version_order) = parse_registry_tool(&short, &value)
            .wrap_err_with(|| format!("invalid registry/{short}.toml"))?;
        missing_version_order |= tool_missing_version_order;
        entries.insert(short, tool.clone());
        for alias in tool.aliases {
            entries.insert((*alias).to_string(), tool.clone());

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Re-download the registry archive from a trusted source and clear the mise registry cache (`mise cache clear`).
  2. Check total uncompressed size (`tar -tvzf archive.tar.gz | awk '{s+=$3} END{print s}'`) to confirm the archive is bloated.
  3. If you publish the registry, slim the archive: exclude non-registry files, minify entry TOMLs, or split the registry.
Defensive patterns

Strategy: validation

Validate before calling

# shell: sum uncompressed sizes and compare to the archive-size cap
total=$(tar -tvzf registry.tar.gz | awk '{s+=$3} END{print s}'); echo "total uncompressed: $total"

Prevention

When it happens

Trigger: track_registry_archive_entry, called for each entry in parse_registry_archive, when the accumulated entry sizes exceed MAX_REGISTRY_ARCHIVE_SIZE (after a checked add that would also guard overflow).

Common situations: Decompression-bomb style archives that are individually small entries but huge in total, corrupted or tampered registry downloads, or publishers shipping bloated archives full of non-registry data.

Understand the failure class

Background: "File too large" / "file size exceeds limit" errors: why libraries cap file sizes and how to fix them — this error's family across 46 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/cba392a4d97effb9. Report an issue: GitHub.