entaPub — 任何 EPUB 都能安全地读到最后
损坏的书、制作方式老旧的书、恶意的书。entaPub 是一款能安全打开 EPUB、修复可修复之处,并保持书的原貌交给读者的阅读引擎。
想让打不开的书不再存在。 EPUB 是全世界通用的电子书格式,但实际流通的书中,不符合规范的、中途损坏的、制作方式老旧的并不少见。entaPub 是用 Rust 编写的 EPUB 读取引擎,即使是这样的书也尽可能打开,同时不让读者的设备陷入危险。
特点#
损坏了也能读
先严格按规范读取,只有失败时才依次进行 XML 修复、作为 HTML 重新读取、重新组装书籍,逐步恢复。
清楚修复了什么
在哪个阶段、如何修复,连同可信度一起作为诊断记录下来。不会止步于“总算显示出来了”。
打开书不会对外通信
不去读取外部的 CSS 或图片,只用书中已有的内容来组装。
可执行的内容会被移除
移除 script、iframe、javascript: 等,并记录移除的情况。
不触碰书外的文件
不接受用 ../ 或绝对路径指向书外的引用。
书再大也不会卡住
对文件大小、解压量、嵌套深度和元素数量设置上限,即使是极端的书也不会让设备卡死。
内存安全
禁止使用 Rust 的 unsafe,并用 AFL++ 模糊测试大量尝试损坏的输入。
原样呈现书的面貌
着重号、竖排和缩进都是正文的一部分。只移除危险的指定,保留竖排、注音(ruby)、固定版式和跨页。
EPUB 2 和 EPUB 3 都支持
无论新书还是制作方式老旧的书,都能从同一个入口阅读。
阅读与制作#
entaPub 还包含“Builder”,它从相同的输入一定会组装出相同的 EPUB。把用 KuroEditor 写成的稿件制作成 EPUB 的是这个 Builder,在 KuroViewer 中打开书的是 Reader。阅读一方和制作一方按同样的思路打造,因此 Entamy 的产品能够从头到尾亲手处理电子书。
| 支持格式 | EPUB 2 / EPUB 3(固定版式、竖排、注音、跨页) |
|---|---|
| 恢复 | 严格 → XML 修复 → 作为 HTML 重新读取 → 重新组装书籍(每个阶段都记录为诊断) |
| 安全性 | 无外部通信、移除可执行元素、拒绝书外引用、资源上限 |
| 实现 | Rust(禁止 unsafe)、AFL++ 模糊测试 |
| 使用它的产品 | KuroViewer(阅读)、KuroEditor(制作) |
| 提供形式 | 内置于 Entamy 的产品中使用(是否开源尚未决定) |
如果开源,将以 Kuro License(MIT + 权利人署名)发布。
