Validación del grafo de segmentos JBIG2
HotPDF valida las imágenes JBIG2 incrustadas y los flujos JBIG2Globals antes de que un decodificador nativo o externo los reciba
El validador realiza un recorrido de segmentos acotado seguido de un recorrido iterativo del grafo de dependencias, usando una búsqueda indexada por número de segmento en lugar de escaneos repetidos
Validación antes del procesamiento personalizado
Options := DefaultJBIG2SegmentGraphValidationOptions;
Options.MaxSegments := 32768;
Options.MaxTotalReferences := 131072;
Options.MaxReferenceDepth := 512;
Options.MaxSymbols := 500000;
if not HPDFValidateJBIG2SegmentGraph(ImageData, GlobalData,
Options, Info) then
raise Exception.Create(string(
HPDFJBIG2SegmentGraphValidationStatusName(Info.Status)));
TJBIG2SegmentGraphValidationInfo informa de los recuentos de segmentos y bordes, de los nuevos símbolos declarados, de la profundidad máxima de dependencia y del flujo, desplazamiento de bytes, número de segmento y número de referencia asociados con el primer fallo
Los presupuestos viven en un registro TJBIG2SegmentGraphValidationOptions cuyos campos MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth y MaxSymbols acotan cada recorrido
El estado terminal es un valor TJBIG2SegmentGraphValidationStatus que va de no comprobado y válido hasta rechazo de opciones, fallos de encabezado y de referencias, ciclos y violaciones del diccionario de símbolos, y HPDFJBIG2SegmentGraphValidationStatusName lo representa como texto
FailureStreamKind usa TJBIG2SegmentStreamKind para indicar si el primer fallo se encontró en el stream de globals (jbsskGlobals) o en el stream de imagen (jbsskImage)
THPDFJBIG2Decoder.LastSegmentGraphValidationInfo conserva el mismo informe después de LoadFromByteArray o LoadRegionFromByteArray
Condiciones de fallo cerrado
La validación rechaza encabezados malformados o truncados, encabezados de archivo independientes en flujos incrustados, tablas de referencias largas demasiado grandes y cortas prohibidas, identificadores de segmento duplicados o ausentes, dependencias físicamente hacia adelante, ciclos de dependencia, profundidad excesiva y superaciones de los presupuestos de segmentos o bordes configurados
Los segmentos de imagen deben usar asociación de página 1, los segmentos globales deben usar asociación de página 0 y un segmento global no puede depender de un segmento de imagen
Se rechazan los segmentos incrustados de fin de página, fin de archivo y paleta de colores, así como los segmentos de región solo de página y de información de página colocados en JBIG2Globals
Los encabezados de las tablas de símbolos se inspeccionan antes de la decodificación para que los recuentos de símbolos nuevos y exportados declarados, los grupos de símbolos agregados de entrada y los totales de exportación imposibles fallen antes de la asignación de mapas de bits
Límite entre decodificador y caché de globals
THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode y las llamadas incrustadas HPDFJBIG2DecDecodeEx comparten la misma política
Los backends nativos y externos registrados usan rutas internas ya validadas, evitando un recorrido duplicado del grafo en la decodificación normal
THPDFJBIG2GlobalsPool.Register solo acepta un flujo de segmentos global-válido exclusivo, evitando que diccionarios compartidos malformados entren en la reutilización a nivel de documento
Los archivos JBIG2 independientes pasados con Embedded = False conservan su ruta de decodificación separada orientada a archivos
Consulte soporte de compresión JBIG2, THPDFJBIG2Decoder.LoadFromByteArray y THPDFJBIG2Decoder.LoadRegionFromByteArray