oven-sh/bun · error · Error
no file entry in ${url}
Error message
no file entry in ${url} What it means
zipBinarySize() walked the central directory but every entry was either a directory (name ends with /) or reported uncompressed size 0, leaving size === 0. The zip contains no readable file entry for the binary-size probe.
Source
Thrown at scripts/binary-size.ts:354
break;
}
}
if (eocd < 0) throw new Error(`no zip EOCD in ${url}`);
let p = dv.getUint32(eocd + 16, true) - (total - tail);
if (p < 0) throw new Error(`zip central directory not within tail for ${url}`);
let size = 0;
while (p + 46 <= eocd && dv.getUint32(p, true) === 0x02014b50) {
const uncompressed = dv.getUint32(p + 24, true);
const nameLen = dv.getUint16(p + 28, true);
const name = new TextDecoder().decode(buf.subarray(p + 46, p + 46 + nameLen));
// The binary is the only non-directory entry; take the largest in case the
// zip ever grows extra metadata files.
if (!name.endsWith("/") && uncompressed > size) size = uncompressed;
p += 46 + nameLen + dv.getUint16(p + 30, true) + dv.getUint16(p + 32, true);
}
if (size === 0) throw new Error(`no file entry in ${url}`);
return size;
}
View on GitHub (pinned to 8c5296ac45)
Solutions
- Download the zip and inspect with unzip -l — if it lists the binary, the parser needs adjusting for that layout
- If the asset is genuinely empty or corrupt, re-publish the release asset
- Check the walk condition (p + 46 <= eocd) is not ending early because of extra fields
Defensive patterns
Strategy: fallback
Try / catch
try { return await zipBinarySize(url); }
catch (e) {
if (/no file entry/.test(e.message)) {
// verify with a real unzipper locally before declaring the asset corrupt
return sizeFromFullZip(new Uint8Array(await (await fetch(url)).arrayBuffer()));
}
throw e;
} Prevention
- Cross-check one asset with a real unzipper whenever release zip layout changes
- Treat parse failures as suspect-data signals, not crashes
When it happens
Trigger: A zip whose only non-directory entries report 0 uncompressed size (malformed or partial central directory, genuinely empty artifact), or the entry walk terminating immediately because p + 46 exceeds the EOCD offset due to misalignment.
Common situations: Corrupted release asset uploads; zips produced by unusual packers whose central directory the minimal parser misreads; empty placeholder assets during publish.
Related errors
- no zip EOCD in ${url}
- zip central directory not within tail for ${url}
- HEAD ${url}: ${head.status}
- Range ${url}: ${res.status}
- picsum ${p.id}: ${res.status}
AI-assisted analysis of oven-sh/bun@8c5296ac45 (2026-08-16).
Data as JSON: /api/errors/dd5e17e0ee0f515d.
Report an issue: GitHub.