JBIG2-segmentgrafvalidering

HotPDF validerar inbäddade JBIG2-bild- och JBIG2Globals-strömmar innan en inbyggd eller extern avkodare får ta emot dem

Validatorn utför en begränsad segmentvandring följd av en iterativ beroendegraf-traversering, med indexerad segmentnummeruppslagning i stället för upprepade skanningar

Validera före anpassad bearbetning

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 rapporterar antal segment och kanter, deklarerade nya symboler, maximalt beroendedjup samt strömmen, bytoffseten, segmentnumret och referensnumret som är associerade med det första felet

Budgeterna ligger i posten TJBIG2SegmentGraphValidationOptions vars fält MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth och MaxSymbols sätter gränserna för varje vandring

Sluttillståndet är ett TJBIG2SegmentGraphValidationStatus-värde som spänner från ej kontrollerad och giltig till avvisade alternativ, huvud- och referensfel, cykler och symbolordlistebrott, och HPDFJBIG2SegmentGraphValidationStatusName renderar det som text

FailureStreamKind använder TJBIG2SegmentStreamKind för att ange huruvida det första felet hittades i globals-strömmen (jbsskGlobals) eller bildströmmen (jbsskImage)

THPDFJBIG2Decoder.LastSegmentGraphValidationInfo behåller samma rapport efter LoadFromByteArray eller LoadRegionFromByteArray

Stäng-felsäkra villkor

Validering avvisar felformade eller trunkerade huvuden, fristående filhuvuden i inbäddade strömmar, förbjudna korta och överdimensionerade långa referenstabeller, duplicerade eller saknade segmentidentifierare, fysiskt framåtberoenden, beroendecykler, överdrivet djup samt konfigurerade överskridanden av segment- eller kantbudgetar

Bildsegment måste använda sidassociation 1, globala segment måste använda sidassociation 0 och ett globalt segment kan inte bero på ett bildsegment

Inbäddade end-of-page-, end-of-file- och färgpalettsegment avvisas, liksom endast-sida region- och sidinformationssegment som placeras i JBIG2Globals

Symbolordlistehuvuden inspekteras före avkodning så att deklarerade nya och exporterade symbolantal, aggregerade indatasymbolpooler och omöjliga exporttotaler misslyckas före bitmappsallokering

Avkodarens och globals-cachens gräns

THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode och inbäddade HPDFJBIG2DecDecodeEx-anrop delar samma policy

De registrerade inbyggda och externa backenden använder redan validerade interna sökvägar, vilket undviker en duplicerad grafvandring vid normal avkodning

THPDFJBIG2GlobalsPool.Register accepterar endast en giltig endast-global segmentström, vilket förhindrar att felformade delade ordlistor kommer in i återanvändning på dokumentnivå

Fristående JBIG2-filer som skickas med Embedded = False behåller sin separata filorienterade avkodningssökväg

Se JBIG2-komprimeringsstöd, THPDFJBIG2Decoder.LoadFromByteArray och THPDFJBIG2Decoder.LoadRegionFromByteArray