“CRC failed” or “Unexpected end of archive”: the ZIP is damaged or incomplete
The archive lists fine, then extraction dies halfway — or it will not open at all. The ZIP format can tell when its contents do not add up. That message is worth believing.
What those messages actually mean
- CRC failed / “checksum error”: this one file’s bytes do not match the CRC-32 stored next to it. Other files in the same ZIP may still be fine.
- Unexpected end of archive / “unexpected end of compressed data”: the extractor ran out of bytes in the middle of an entry.
- End-of-central-directory signature not found: the ZIP’s contents table, which is written last, is missing. Classic sign of a truncated download or a file that is not a ZIP at all (sometimes a file renamed from
.exeor.pdfto.zip).
CRC-32 is a quick integrity check, not encryption and not a signature. It catches accidental damage. It does not prove who made the file, and it is not a malware scan.
How to test without extracting
# Info-ZIP unzip (Linux, macOS, Windows with Git or WSL)
unzip -t archive.zip
# 7-Zip
7z t archive.zip
# Compare with a hash the sender published
sha256sum archive.zip
Paste both hashes into the hash generator if you would rather not use a terminal: same SHA-256 means same bytes. A ZIP that is merely a bit larger than its contents will still pass these tests; a cut-off download will not.
Usual causes, and what to try
| Likely cause | What to try |
|---|---|
| Download stopped early, or a proxy cut the file | Compare the file size with the size the website advertised. Download again, ideally over a stable connection. Resume only if the server truly supports it. |
| Email or chat stripped or capped the attachment | Many mail systems reject or silently truncate large ZIPs. Use a file drop the recipient already trusts, or shrink the contents first (for photos, the image compressor). |
| The disk filled up while the ZIP was being created | The archive is short. Free some space and build it again. |
| The file is not a ZIP | Open the first bytes in a hex viewer, or run file archive.zip. A real ZIP starts with PK. Some download pages serve an HTML error page saved with a .zip name. |
| Transfer in “text” (ASCII) mode on old FTP | Line endings got rewritten and every checksum broke. Transfer again as binary. |
About repair tools
Some archivers offer a repair mode that tries to read whatever entries are still complete. That can salvage files from the start of a truncated archive; it cannot invent bytes that never arrived. Treat repair as a last resort after a fresh download, and then check the recovered files themselves — a “repaired” picture may still be cut off at the bottom.
A healthy ZIP of photos that simply did not shrink is a different puzzle: zipping photos does not make them smaller.
Related
Lossless vs lossy compression · Why a ZIP can be larger than the originals · gzip vs ZIP · Why zipping photos barely makes them smaller (interactive lesson) · Why zipping photos does not make them smaller · Compress many photos at once · Compress an image without uploading it · Image compressor
Questions
What does CRC failed mean in a ZIP file?
The extracted bytes did not match the CRC-32 checksum stored for that entry. The file was damaged, truncated, or is not the file the archive thinks it is. Other entries in the same ZIP may still extract cleanly.
What does unexpected end of archive mean?
The extractor reached the end of the file before the ZIP said it should. Almost always a partial download or a ZIP that was still being written when the disk filled up.
How do I test a ZIP file without extracting it?
Run unzip -t archive.zip or 7z t archive.zip. Both read every entry and check its CRC. To see whether you have the same file the sender built, compare SHA-256 hashes.
Can I repair a corrupt ZIP?
Sometimes, if the beginning of the archive is intact: repair mode may recover complete entries and give up on the rest. It cannot recreate missing bytes. Re-downloading or rebuilding the archive is the reliable fix.
Does a CRC error mean the ZIP has a virus?
No. It means the bytes do not match the checksum. That is accidental damage or a truncated file, not a malware verdict. A clean checksum also does not mean the contents are safe to run.
Published .