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