Processos de codec isolados contra falhas
O HotPDF consegue retirar do processo anfitrião a descodificação de imagens DCTDecode, JPXDecode e JBIG2Decode, que é de risco elevado
Isolation modes
cimAutomaticé a predefinição e usaHotPDFCodecWorker.exequando este existe junto ao executável anfitrião; caso contrário, mantém o caminho compatível dentro do próprio processocimRequiredfalha em modo fechado quando o worker está em falta, não consegue arrancar, sofre crash, excede o tempo limite, rejeita a entrada ou ultrapassa um limite de saídacimDisabledusa sempre os decoders in-process existentes
Depois de um worker disponível aceitar um pedido, cimAutomatic não repete no processo anfitrião entradas que falharam ou que sejam maliciosas
Process boundary
Cada pedido de descodificação corre num processo oculto novo, atribuído a um Windows Job Object de processo único
- O Job Object termina o worker e quaisquer descendentes que ele tente criar quando o seu handle é fechado
CodecWorkerMemoryLimitBytesaplica um teto de memória committed por processo e é, por predefinição, 512 MiBCodecWorkerTimeoutMillisecondsé, por predefinição, 10.000 ms e termina um worker bloqueado- A entrada codificada, os globals JBIG2 opcionais e a saída BGR24 usam um único mapeamento de memória partilhada com nome aleatório, com um protocolo versionado de largura fixa
- A capacidade da saída descodificada é limitada pela geometria declarada da imagem e por
DecodeBudgetBytes - Os pedidos JPEG de baixa resolução levam as dimensões de destino exatas e devolvem a geometria de reduced-DCT sem construir um raster de resolução total no worker
Configuration
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;
Um vazio CodecWorkerExecutable resolves to HotPDFCodecWorker.exe beside the current application
Telemetry
GetLastCodecWorkerInfo reporta o estado, o identificador do processo, o exit code, os milissegundos decorridos e um diagnóstico delimitado do lado do anfitrião
GetLastJPEGReducedDecodeInfo reporta a geometria de origem, escalada, de saída e de scanline após um pedido JPEG reduzido isolado
Estados distintos cobrem workers indisponíveis ou impossíveis de lançar, timeout, crash, rejeição na descodificação, incompatibilidade de protocolo e limites da saída descodificada
Build and deployment
build-HotPDF-Codec-Worker.cmd
O comando de build emite workers Win32 e Win64 separados em tools\CodecWorker\<platform>\Release; distribua o worker que corresponde à arquitetura do processo anfitrião