Repository navigation
Аудит зависимостей: закрыть RustSec и обновить совместимые версии - #3
Merged
Merged
Conversation
Поднять zip до 9, quick-xml до 0.42, pdf-extract до 0.12, calamine до 0.37 и html2text до 0.17. Неиспользуемые docx-rs и крейт epub удалены: они удерживали старые копии zip и quick-xml. Co-authored-by: kellas <alex.step.kellas@gmail.com>
@napi-rs/cli оставлен на линии 3.7.4: с 3.8 сборка создаёт временный каталог рядом с корнем крейта и в этом окружении падает с EACCES. Co-authored-by: kellas <alex.step.kellas@gmail.com>
Минорное обновление внутри v1. FreeBSD 14.2 в этой версии всё ещё поддерживается. Co-authored-by: kellas <alex.step.kellas@gmail.com>
maxBytes теперь ограничивает суммарный распакованный размер zip, включая xlsx и ods до вызова calamine. Слишком тяжёлый working set отклоняется сразу. Длина файла сравнивается как u64. PDF читается в память, без mmap. setMaxConcurrent(0) снимает пользовательский лимит до потолка 512, а отравленный RwLock больше не роняет процесс. Co-authored-by: kellas <alex.step.kellas@gmail.com>
allowUrls и allowedHosts не меняют поведение по умолчанию. Тесты проверяют zip-бомбу docx/xlsx/ods, отказ рабочего набора и редирект на чужой хост. Co-authored-by: kellas <alex.step.kellas@gmail.com>
Публикация использует actions/setup-node v7, чтобы не подставлять фиктивный NODE_AUTH_TOKEN. Сборки ставят зависимости через bun install --frozen-lockfile. Co-authored-by: kellas <alex.step.kellas@gmail.com>
В lockfile было @calendar/doc-extract, в package.json — @alexstep/doc-extract. Co-authored-by: kellas <alex.step.kellas@gmail.com>
Отказ от mmap и список хостов меняют поведение и остаются на решение автора. setMaxConcurrent(0) снова ничего не делает, как описано в README. Co-authored-by: kellas <alex.step.kellas@gmail.com>
docx, pptx, epub, odt, xlsx и ods с лимитом 8 КиБ и записью на 16 КиБ должны кидать ошибку размера. Раньше такая распаковка проходила. Co-authored-by: kellas <alex.step.kellas@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Исправлено
maxBytesне ограничивал распаковку docx, pptx, epub, odt, pkpass и xlsx/ods через calaminemaxBytes(при безлимитном вводе остаётся потолок 64 МиБ). Больше 4096 записей тоже отклоняется.Input exceeds max size. До правки такая распаковка проходила.acquire_working_setInput exceeds working set. Семафор при этом не держится.setMaxWorkingSetMB(1)кидает ошибку, а не ждёт.u64→usizeна 32-bitu64.file_len_exceedsотклоняетu32::MAX + 10при лимите 100. Усечённое доu32значение было бы меньше лимита.bun installвrelease.yml, включая FreeBSD, с--frozen-lockfile.bun install --frozen-lockfile.NODE_AUTH_TOKENв publishactions/setup-node@v7в job публикации. v7 не подставляетXXXXX-…, если секрет не задан. Остальныеsetup-node@v6не ставятregistry-url.bun.lock@calendar/doc-extract→@alexstep/doc-extract.bun install --frozen-lockfileпроходит.cargo auditне в CIlint.ttf-parserunmaintained сборку не роняет.RwLockinto_inner, процесс не паникует.Оставлено
Mmap::mapвsrc/formats/pdf.rsоставлен. Варианты: читать файл вVecпосле проверки размера (убираетunsafe, пиковое потребление как у буфера, публичный текст не меняется); оставить mmap и документировать, что усечение файла во время разбора — неопределённое поведение POSIX. Выбор за автором, в этот PR mmap не трогался повторно.extractText('https://…')по-прежнему качает любойhttp(s)и следует редиректам. Варианты: опцияallowUrls: false; опцияallowedHostsс ручной проверкой каждого редиректа; по умолчанию запретить приватные адреса. Любой из них — новое публичное поведение, в код не добавлялся.setMaxConcurrent(0)по-прежнему ничего не делает, как написано в README. Вариант: трактовать0как снятие пользовательского лимита до встроенного потолка 512, по аналогии сsetMaxFilesizeMB(0). Это сломает текущий контракт.@napi-rs/cli3.8+. С 3.8napi buildсоздаёт временный каталог в родителе крейта и здесь падает сEACCES. Оставлен 3.7.4.actions/checkoutv7,actions/cachev6. Мажоры без прогона musl-кросса и матрицы.base640.23 иthiserror2. Уязвимостей нет.ttf-parser0.25.1 unmaintained (RUSTSEC-2026-0192) черезlopdf0.42. Замены внутриpdf-extractнет.i686иarmv7. Эти цели остаются вrelease.yml.maxBytes.Зависимости
cargo auditпосле обновления уязвимостей не показывает.bun auditчистый.memmap2поднят до 0.9.11 (RUSTSEC-2026-0186) и остаётся, потому что PDF по-прежнему отображается в память.zipquick-xmlpdf-extract/lopdfcalaminezipиquick-xmlhtml2textmemmap2napi,napi-derive,napi-buildtokio,regex,serde_json,encoding_rsdocx-rs, крейтepubzip@emnapi/*,@napi-rs/wasm-runtime,@types/bun@napi-rs/clicross-platform-actions/actionactions/setup-node(publish)Проверки
cargo fmt,cargo clippy --all-targets -- -D warnings,cargo test(34),bun run build,bun test,node --test __tests__/formats.test.mjs(57).