JBIG2 Segment-Graph Validation
HotPDF validerer indlejrede JBIG2-billed- og JBIG2Globals-streams, før en indbygget eller ekstern dekoder modtager dem
Validator'en udfører én afgrænset segmentvandring efterfulgt af en iterativ afhængighedsgraf-traversering, ved hjælp af indekseret segmentnummer-opslag i stedet for gentagne scanninger
Valider før brugerdefineret behandling
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 rapporterer segment- og kant-antal, erklærede nye symboler, maksimal afhængighedsdybde samt den stream, det byte-forskydning, det segmentnummer og det referencenummer, der er knyttet til den første fejl
Budgetterne ligger i en TJBIG2SegmentGraphValidationOptions-post, hvis felter MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth og MaxSymbols sætter grænser for hver eneste vandring
Sluttilstanden er en TJBIG2SegmentGraphValidationStatus-værdi, der spænder fra ikke-kontrolleret og gyldig over afviste options til header- og referencefejl, cyklusser og overtrædelser af symbol-objektordbøger, og HPDFJBIG2SegmentGraphValidationStatusName gengiver den som tekst
FailureStreamKind bruger TJBIG2SegmentStreamKind til at fortælle, om den første fejl blev fundet i globals-streamen (jbsskGlobals) eller i billedstreamen (jbsskImage)
THPDFJBIG2Decoder.LastSegmentGraphValidationInfo bevarer den samme rapport efter LoadFromByteArray eller LoadRegionFromByteArray
Fail-closed-betingelser
Validering afviser fejlbehæftede eller afkortede headere, fritstående fil-headere i indlejrede streams, forbudte korte og for store lange referencetabeller, duplikerede eller manglende segmentidentifikatorer, fysisk fremadrettede afhængigheder, afhængighedscyklusser, overdreven dybde samt konfigurerede segment- eller kantbudget-overudløb
Billedsegmenter skal bruge sideassociation 1, globale segmenter skal bruge sideassociation 0, og et globalt segment kan ikke afhænge af et billedsegment
Indlejrede end-of-page-, end-of-file- og farvepalet-segmenter afvises, ligesom kun-side-region- og sideinformationssegmenter placeret i JBIG2Globals
Symbol-objektordbogs-headere inspiceres før afkodning, så erklærede nye og eksporterede symbolantal, aggregerede input-symbolpuljer og umulige eksporttotaler fejler før bitmapallokering
Dekoder- og globals-cache-grænse
THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode og indlejrede HPDFJBIG2DecDecodeEx-kald deler samme politik
De registrerede indbyggede og eksterne backends bruger allerede validerede interne stier og undgår dermed en dobbelt grafvandring ved normal afkodning
THPDFJBIG2GlobalsPool.Register accepterer kun en gyldig global-only-segmentstream og forhindrer dermed fejlbehæftede delte ordbøger i at indgå i dokumentniveauets genbrug
Fritstående JBIG2-filer sendt med Embedded = False bevarer deres separate filorienterede afkodningssti
Se JBIG2 compression support, THPDFJBIG2Decoder.LoadFromByteArray og THPDFJBIG2Decoder.LoadRegionFromByteArray