xuyueandClaude Opus 5.5 b105fe3cbd fix(测试点): 解压前按条目头拦大小,防 zip bomb
原来 unzipSync 先把整包解进内存,再逐个查大小 —— 检查之前就已经解完了。
实测一个 300KB 的 zip(10 个 30MB 的全零文件)让进程 RSS 涨 455MB,
容器只有 512MB。

- 第一遍 unzipSync 的 filter 只读目录、恒返回 false,按条目头的 originalSize
  累计,单个超 32MB / 总计超 128MB 就抛;第二遍才真解,而且只解 N.in / N.out /
  N.sql(N ≤ 500),压缩包里别的文件一律不解
- originalSize 可以造假,但 fflate 按它分配输出缓冲、不扩容(解多了只截断),
  所以按它限额就是按实际内存限额

实测:同一个 zip bomb 被拦下时 RSS 只涨 1MB;单文件 300MB 的包按单文件上限拦;
正常测试点照常落盘、CRLF 照常归一、带 ../ 的条目名照常被忽略。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 15:14:12 +08:00
S
Description
No description provided
10 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 51%
Vue 47%
Shell 1%
CSS 0.6%
Dockerfile 0.4%