KamoCRM

Encima y arroyo los caminos de imágenes conéte pesado

PerformanceDocsService
Se descapó
23 de septiembre de 2026 a las 2:35 UTC
Autor
Kamo
Compromit
d1a8762

/download cargaron todo el archivo en un byte[] a través de ImageService.downloadDocument antes servirlo; /bulk-download edificó todo el ZIP (o fusionado PDF) como un byte[] en DocumentPrepareService antes de responder; las subidas se ejecutan hasta 3 GB contra los 1,4 GB de este servicio la tapa de 100-id de carga de carga /bulk-download no tenía límite de tamaño detrás de él. pedir cientos de gigabytes en una sola solicitud. buildZip también escribió Img.fileName directamente en a ZipEntrada sin desinfección, por lo que un documento rebautizado para algo así como **************** (fileName está controlado por el usuario y texto libre, cambiado a través de /update/filename/-imgId-) produjo un archivo cuya entrada, abierta por un extractor que no protegerse de la tiro-slibre, escribe fuera del directorio de destino en cualquier OS que el sistema operativo está haciendo el extrayendo. - /download ahora se transmite a través de MinIOStorageService.openRange . StreamingResponseBody, exactamente igual que /stream ya lo hizo, en lugar de amortiguar todo el archivo. (Drops ImageService.downloadDocument's dl-first/dl-last de contabilidad efecto secundario confirmado muerto por grep: nada en el backend de Java alguna vez lee Img.dlFirstDate/dlLastDate, sólo los escribe nunca. La auditoría separada de ImgLogDownload fila vía recordDownloadEvent, que según el EI por el panel de la historia de la descarga, no ha cambiado.) - /bulk-download dedupes solicitó ids antes de la tapa de 100-id y el trabajo por ítem. - /bulk-download se niega directamente (400) una vez que los documentos seleccionados combinados Img.fileSize pass 500 MB, en lugar de intentar la fusión/zip y arriesgarse a una OOM rechazada, no en silencio truncado, porque la plenitud es el punto de un EXPORT a granel. - buildZip de desinfecta cada nombre de entrada a su tramo de ruta final (dividir tanto en / y , desde entonces el extractor puede estar en un sistema operativo que este servidor no controla), cerrando el huelo de zip-slip. NO HECHO, reportado como una brecha conocida: buildZip/mergePdfs todavía construye su resultado como un byte[] antes de responder en lugar de transmitirlo directamente a la respuesta HTTP, el tapón de 500 MB ahora Atado eso a un techo conocido (a la baja de sin límites), pero no se elimina. Convertirlos en escribir en un flujo de salida suministrado por llamadas-suministrado des-dejaría /bulk-download stream también; diferido porque cambia las firmas públicas de DocumentPrepareService, ondeando en tres archivos de prueba existentes (mecelos actualmente cortan el byte[]-retorno métodos de retorno), para una severidad MEDIUM, ya cubierta Remanente, una llamada de alcance deliberada, no un descuido. Nuevas pruebas: ************* (7 casos para desinfectarZipEntryName) y tres cajas añadido a ImagingControllerMediaAssocTest (streaming-not-buffering, id dedupe, el tapón de tamaño). Mutación: Revertir ImagingController.java a su estado pre-fijo convierte a los tres nuevos cajas del controlro rojas; de vuelta desinfectaZipEntryName al nombre de retorno;" se turna 5 de la cremallera de 7 zip-slip caso rojo (el 6o, un nombre de archivo ordinario ya de por sí seguro, no se ve correctamente afectado de cualquier manera). Suite completa: 741 pruebas de verde (fue 731; 10 nuevos).

Todos los cambios

Como lo que ves enviaste?

Todo llega a su espacio de trabajo por sí solo. Comience en el plan gratuito y lea esta página de nuevo en un mes.

Arranzar gratis para siempreVer Precios