KamoCRM

Связанные и потоковые байт-тяжелые пути визуализации

PerformanceDocsService
Порезанный
23 сентября 2026 г. в 02:35 UTC
Автор
Kamo
Обещать
d1a8762

/download загрузил весь файл в байт[] через ImageService.downloadDocument /bulk-download построил весь ZIP (или слил PDF) как один байт. DocumentPrepareService перед ответом; загрузки до 3 ГБ против 1,4 ГБ этой службы куча, и /bulk-download's 100-id cap не имел за собой ограничения по размеру - 100 незавершенных документов могли бы Запросите сотни гигабайт в одном запросе. buildZip также написал Img.fileName a ZipEntry без дезинфицирования, поэтому документ переименовывается во что-то вроде **************************** (имя файла управляется пользователем - свободный текст, изменено через /update/filename/{imgId} - архив, запись которого открывается экстрактором, который не сама защищается от zip-slip, пишет вне целевого каталога, на какой ОС выполняет извлечение. - /download now streams via MinIOStorageService.openRange + StreamingResponseBody, в точности как /stream уже сделал, вместо буферизации всего файла. (Drops ImageService.downloadДокументы) Побочный эффект dl-first/dl-last бухгалтерии — подтвержденный мертвым grep: ничего в бэкэнде Java Никогда не читает Img.dlFirstDate/dlLastDate, только пишет их. Отдельный аудит ImgLogDownload строка через recordDownloadEvent, которую IS читает панель истории загрузки, неизменна. - /bulk-download dedupes requested ids before the 100-id cap and the per-item work. - /bulk-download отказывает сразу (400) после того, как выбранные документы прошли 500 МБ, вместо того, чтобы пытаться слиться с Zip и рисковать OOM, отказались, не молча Усеченный, потому что полнота является точкой объемного ЭКСПОРТа. - buildZip дезинфицирует каждое имя входа в свой конечный сегмент пути (расщепление на оба / и \, так как Экстрактор может находиться на ОС, которую этот сервер не контролирует, закрывая зазор zip-slip. НЕ ДОБЫВАЕТСЯ, сообщается как известный пробел: buildZip/mergePdfs по-прежнему строят свой результат как один байт. прежде чем отвечать, а не транслировать его непосредственно на HTTP-ответ — теперь ограничение 500 МБ Это предел, который до известного потолка (вниз от неограниченного), но он не устраняется. Преобразовать их в Запишите в предоставленный абонентом OutputStream, который также позволит загружать поток /bulk; откладывается, потому что это Изменения в публичных подписях DocumentPrepareService, разбивка на три существующих тестовых файла (Камки в настоящее время заглушают байт-методы возврата), для MEDIUM-серьезности, уже зажатой Остаток — преднамеренный вызов, а не надзор. Новые тесты: **************************** (7 случаев для санации ZipEntryName) и три случая Добавлено в ImagingControllerMediaAssocTest (стриминг-не-буферинг, id dedupe, размер колпачка). Проверка на мутацию: возвращение ImagingController.java в префиксное состояние превращает три новых приложения в новые. Случаи контроллера красные; возвращение дезинфицирующего ZipEntryName к «возвращению имени»; 5 из 7 zip-slip Случаи красные (в любом случае, 6-е, уже безопасное обычное имя файла, не затронуто). Полный комплект: 741 тест зеленый (был 731; +10 новый).

Все изменения

Как вы видите судоходство?

Все это приходит в ваше рабочее пространство самостоятельно. Начните с бесплатного плана и прочитайте эту страницу через месяц.

Начните бесплатно навсегдаПосмотреть цены