Codec Workers con aislamiento ante crashes
HotPDF puede sacar del proceso host la decodificación de imágenes de alto riesgo DCTDecode, JPXDecode y JBIG2Decode
Modos de aislamiento
cimAutomatices el modo por defecto y usaHotPDFCodecWorker.execuando está disponible junto al ejecutable del host; de lo contrario conserva la vía compatible en procesocimRequiredfalla de forma cerrada cuando el worker falta, no puede arrancar, crashea, excede el timeout, rechaza la entrada o supera un límite de salidacimDisabledsiempre usa los decodificadores en proceso existentes
Una vez que un worker disponible acepta una solicitud, cimAutomatic no reintenta la entrada fallida o maliciosa en el proceso host
Frontera de proceso
Cada solicitud de decodificación corre en un proceso oculto recién creado asignado a un Windows Job Object de proceso único
- El Job Object termina el worker y cualquier descendiente intentado cuando su handle se cierra
CodecWorkerMemoryLimitBytesaplica un techo de memoria committed por proceso y por defecto es 512 MiBCodecWorkerTimeoutMillisecondspor defecto es 10,000 ms y termina un worker colgado- La entrada codificada, los JBIG2 globals opcionales y la salida BGR24 usan un único mapping de shared-memory con nombre aleatorio y un protocolo versionado de ancho fijo
- La capacidad de salida decodificada está acotada por la geometría de imagen declarada y por
DecodeBudgetBytes - Las solicitudes JPEG de baja resolución llevan las dimensiones objetivo exactas y devuelven geometría reduced-DCT sin construir un raster completo del worker a resolución plena
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 reporta el estado, el identificador de proceso, el código de salida, los milisegundos transcurridos y un diagnóstico acotado del lado del host
GetLastJPEGReducedDecodeInfo reporta la geometría de source, escalado, salida y scanline tras una solicitud JPEG reducida aislada
Los estados diferenciados cubren workers no disponibles o no lanzables, timeout, crash, rechazo de decodificación, mismatch de protocolo y límites de salida decodificada
Build y despliegue
build-HotPDF-Codec-Worker.cmd
El comando de build emite workers Win32 y Win64 separados bajo tools\CodecWorker\<platform>\Release; despliegue el worker que coincida con la arquitectura del proceso host