JBIG2-segmentgraafvalidatie

HotPDF valideert ingebedde JBIG2-afbeeldings- en JBIG2Globals-stromen voordat een native of externe decoder deze ontvangt

De validator voert één begrensde segmentwandeling uit gevolgd door een iteratieve afhankelijkheidsgraaf-traversal, met geïndexeerde segmentnummer-opzoeking in plaats van herhaalde scans

Valideren vóór aangepaste verwerking

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 rapporteert segment- en randaantallen, gedeclareerde nieuwe symbolen, maximale afhankelijkheidsdiepte en de stroom, byte-offset, segmentnummer en referentienummer die aan de eerste fout zijn gekoppeld

De budgetten staan in een TJBIG2SegmentGraphValidationOptions-record waarvan de velden MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth en MaxSymbols elke wandeling begrenzen

De eindtoestand is een TJBIG2SegmentGraphValidationStatus-waarde die loopt van niet-gecontroleerd en geldig via geweigerde opties, header- en referentiefouten en cycli tot symboolwoordenboek-schendingen, en HPDFJBIG2SegmentGraphValidationStatusName zet die om naar tekst

FailureStreamKind gebruikt TJBIG2SegmentStreamKind om aan te geven of de eerste fout in de globals-stroom (jbsskGlobals) of in de afbeeldingsstroom (jbsskImage) is gevonden

THPDFJBIG2Decoder.LastSegmentGraphValidationInfo behoudt hetzelfde rapport na LoadFromByteArray of LoadRegionFromByteArray

Gesloten-faalcondities

Validatie verwerpt onjuist gevormde of afgekapte headers, standalone-bestandsheaders in ingebedde stromen, verboden korte en te grote lange referentietabellen, dubbele of ontbrekende segment-id's, fysiek voorwaartse afhankelijkheden, afhankelijkheidscycli, overmatige diepte en geconfigureerde overschrijdingen van het segment- of randenbudget

Afbeeldingssegmenten moeten pagina-associatie 1 gebruiken, globale segmenten moeten pagina-associatie 0 gebruiken, en een globaal segment kan niet afhangen van een afbeeldingssegment

Ingebedde einde-pagina-, einde-bestand- en kleurenpalet-segmenten worden verworpen, evenals alleen-pagina-regio- en pagina-informatie-segmenten die in JBIG2Globals zijn geplaatst

Symboolwoordenboek-headers worden vóór decodering geïnspecteerd, zodat gedeclareerde nieuwe en geëxporteerde symboolaantallen, geaggregeerde invoersymboolpools en onmogelijke exporttotalen falen vóór bitmap-toewijzing

Decoder- en globals-cache-grens

THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode en ingebedde HPDFJBIG2DecDecodeEx-aanroepen delen hetzelfde beleid

De geregistreerde native en externe backends gebruiken reeds gevalideerde interne paden, waardoor een dubbele graafwandeling bij normale decodering wordt vermeden

THPDFJBIG2GlobalsPool.Register accepteert alleen een geldige alleen-globale-segmentstroom, waardoor onjuist gevormde gedeelde woordenboeken geen hergebruik op documentniveau kunnen binnendringen

Standalone JBIG2-bestanden die met Embedded = False worden doorgegeven, behouden hun afzonderlijke bestandsgerichte decodeerpad

Zie JBIG2-compressieondersteuning, THPDFJBIG2Decoder.LoadFromByteArray en THPDFJBIG2Decoder.LoadRegionFromByteArray