Trabajadores de códec aislados frente a bloqueos
HotPDF puede sacar del proceso host la descodificación de imágenes de alto riesgo DCTDecode, JPXDecode y JBIG2Decode
Modos de aislamiento
cimAutomatices el valor predeterminado y usaHotPDFCodecWorker.execuando está disponible junto al ejecutable host; en caso contrario, conserva la ruta compatible en procesocimRequiredfalla en modo cerrado cuando el trabajador falta, no puede iniciarse, se bloquea, agota el tiempo, rechaza la entrada o supera un límite de salidacimDisabledsiempre usa los descodificadores existentes en proceso
Una vez que un trabajador disponible acepta una solicitud, cimAutomatic no reintenta en el proceso host la entrada fallida o maliciosa
Límite del proceso
Cada solicitud de descodificación se ejecuta en un proceso oculto nuevo asignado a un objeto de trabajo de Windows de un solo proceso
- El objeto de trabajo termina el trabajador y cualquier descendiente intentado cuando se cierra su identificador
CodecWorkerMemoryLimitBytesaplica un tope de memoria confirmada por proceso y su valor predeterminado es 512 MiBCodecWorkerTimeoutMillisecondstiene un valor predeterminado de 10 000 ms y termina un trabajador bloqueado- La entrada codificada, los globales JBIG2 opcionales y la salida BGR24 usan una asignación de memoria compartida con nombre aleatorio y un protocolo versionado de ancho fijo
- La capacidad de salida descodificada está limitada por la geometría de imagen declarada y por
DecodeBudgetBytes - Las solicitudes JPEG de baja resolución llevan las dimensiones de destino exactas y devuelven la geometría DCT reducida sin construir un ráster de trabajador a resolución completa
Configuración
PDF.CodecIsolationMode := cimRequired;
PDF.CodecWorkerExecutable :=
'C:\Program Files\MyApp\HotPDFCodecWorker.exe';
PDF.CodecWorkerTimeoutMilliseconds := 5000;
PDF.CodecWorkerMemoryLimitBytes := 256 * 1024 * 1024;
Bitmap := PDF.ExtractLoadedImage(0);
if Bitmap = nil then
begin
PDF.GetLastCodecWorkerInfo(Info);
Writeln(Ord(Info.Status), ': ', Info.ErrorMessage);
end;
Un CodecWorkerExecutable vacío se resuelve a HotPDFCodecWorker.exe junto a la aplicación actual
Telemetría
GetLastCodecWorkerInfo informa del estado, el identificador de proceso, el código de salida, los milisegundos transcurridos y un diagnóstico acotado del lado host
GetLastJPEGReducedDecodeInfo informa de la geometría de origen, escalada, de salida y de línea de escaneo después de una solicitud JPEG reducida aislada
Estados distintos cubren trabajadores no disponibles o no iniciables, tiempo de espera, bloqueo, rechazo de descodificación, discrepancia de protocolo y límites de salida descodificada
Compilación e implementación
build-HotPDF-Codec-Worker.cmd
El comando de compilación genera trabajadores Win32 y Win64 independientes en tools\CodecWorker\<platform>\Release; implemente el trabajador que coincida con la arquitectura del proceso host