entaPub — будь-який EPUB безпечно й до кінця
Пошкоджені книжки, книжки старого формату, шкідливі книжки. entaPub — рушій читання, що безпечно відкриває EPUB, виправляє те, що можна виправити, і передає книжку читачеві в її первісному вигляді.
Хочемо, щоб не лишилося книжок, які неможливо відкрити. EPUB — формат електронних книжок, яким користуються в усьому світі, але серед книжок, що реально поширюються, чимало таких, що не відповідають стандарту, частково пошкоджені або зроблені за старими правилами. entaPub — рушій читання EPUB, написаний на Rust, який відкриває навіть такі книжки, наскільки це можливо, і при цьому не наражає пристрій читача на небезпеку.
Особливості#
Читається, навіть якщо пошкоджено
Спершу книжка читається суворо за стандартом; лише якщо це не вдається, відновлення відбувається поетапно: виправлення XML, повторне читання як HTML, перескладання книжки.
Видно, що саме виправлено
На якому етапі й як було виправлено, записується як діагностика разом зі ступенем достовірності. Жодного «якось та відобразилося».
Відкриття книжки не звертається до мережі
Зовнішні CSS чи зображення не завантажуються; книжка складається лише з того, що в ній є.
Усе виконуване вилучається
script, iframe, javascript: тощо вилучаються, і кожне вилучення записується.
Жодного доступу до файлів поза книжкою
Посилання, що ведуть за межі книжки через ../ або абсолютні шляхи, відхиляються.
Навіть величезна книжка нічого не зупинить
Розмір файлу, обсяг розпакованих даних, глибина вкладення й кількість елементів обмежені, тож навіть екстремальна книжка не заморозить пристрій.
Безпека пам’яті
unsafe у Rust заборонено, а фазинг з AFL++ масово перевіряє пошкоджені вхідні дані.
Книжка у своєму вигляді
Знаки наголосу, вертикальне письмо й відступи — частина тексту. Вилучаються лише небезпечні вказівки, а вертикальне письмо, рубі, фіксована верстка й розвороти зберігаються.
І EPUB 2, і EPUB 3
Нові книжки й книжки старого формату читаються через один і той самий вхід.
Читати й створювати#
До entaPub входить і «Builder», який з тих самих вхідних даних завжди складає той самий EPUB. Саме Builder перетворює на EPUB рукописи, написані в KuroEditor, а Reader відкриває книжки в KuroViewer. Оскільки читання й створення побудовано за одними принципами, продукти Entamy можуть самі обробляти електронні книжки від початку до кінця.
| Підтримувані формати | EPUB 2 / EPUB 3 (фіксована верстка, вертикальне письмо, рубі, розвороти) |
|---|---|
| Відновлення | Суворе читання → виправлення XML → повторне читання як HTML → перескладання книжки (кожен етап записується як діагностика) |
| Безпека | Без зовнішніх з’єднань, вилучення виконуваних елементів, відхилення посилань поза книжку, обмеження ресурсів |
| Реалізація | Rust (unsafe заборонено), фазинг з AFL++ |
| Де використовується | KuroViewer (читання), KuroEditor (створення) |
| Форма постачання | Вбудовано в продукти Entamy (відкриття коду ще не вирішено) |
Якщо entaPub стане відкритим, його буде опубліковано за Kuro License (MIT + зазначення правовласників).
