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
- Re-download the registry archive from a trusted source and clear the mise registry cache (`mise cache clear`).
- Check total uncompressed size (`tar -tvzf archive.tar.gz | awk '{s+=$3} END{print s}'`) to confirm the archive is bloated.
- 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
- Monitor total uncompressed registry size in CI as part of the release checklist.
- Minify entry TOMLs and exclude non-registry content to keep archives slim.
- Validate downloads against published checksums to detect bomb-style corruption.
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
- registry archive contains too many entries
- registry archive entry is too large
- content-level SLSA verification rejected unsafe archive path
- the release list of packslip:{project} has sequence {sequenc
- the signed release list of packslip:{project} disappeared; r
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/cba392a4d97effb9.
Report an issue: GitHub.