JBIG2 Segment-Graph Validation
HotPDF provjerava ugrađene JBIG2 slike i JBIG2Globals tokove prije nego što ih primi nativni ili vanjski dekoder
Validator izvodi jedan ograničeni prolaz segmentima praćen iterativnim obilaskom grafa ovisnosti, koristeći indeksirano pretraživanje broja segmenta umjesto ponovljenih skeniranja
Provjerite prije prilagođene obrade
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 prijavljuje brojeve segmenata i bridova, deklarirane nove simbole, najveću dubinu ovisnosti te stream, bajt offset, broj segmenta i broj reference povezane s prvim neuspjehom
Proračuni žive u zapisu TJBIG2SegmentGraphValidationOptions čija polja MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth i MaxSymbols ograničavaju svaki obilazak
Završno stanje je vrijednost TJBIG2SegmentGraphValidationStatus koja se kreće od not-checked i valid, preko odbijanja opcija, grešaka zaglavlja i referenci, ciklusa i kršenja symbol-dictionaryja, a HPDFJBIG2SegmentGraphValidationStatusName prikazuje je kao tekst
FailureStreamKind koristi TJBIG2SegmentStreamKind da kaže je li prva greška pronađena u globals toku (jbsskGlobals) ili u toku slike (jbsskImage)
THPDFJBIG2Decoder.LastSegmentGraphValidationInfo zadržava isto izvješće nakon LoadFromByteArray ili LoadRegionFromByteArray
Uvjeti neuspjeha (fail-closed)
Validacija odbija malformirane ili skraćene zaglavlja, standalone header datoteka u ugrađenim tokovima, zabranjene kratke i prevelike duge tablice reference, dvostruke ili nedostajuće identifikatore segmenata, fizički naprijed usmjerene ovisnosti, cikluse ovisnosti, prekomjernu dubinu te prekoračenje konfiguriranog proračuna segmenata ili bridova
Segmenti slika moraju koristiti asocijaciju stranice 1, globalni segmenti asocijaciju stranice 0, a globalni segment ne može ovisiti o segmentu slike
Ugrađena end-of-page, end-of-file i colour-palette segmenti odbijaju se, kao i page-only region i page-information segmenti smješteni u JBIG2Globals
Zaglavlja symbol-dictionaryja pregledavaju se prije dekodiranja tako da deklarirani brojevi novih i izvezenih simbola, agregirani ulazni skupovi simbola i nemogući zbrojevi izvoza padnu prije alokacije bitmape
Granica dekodera i globals-cachea
THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode i ugrađeni HPDFJBIG2DecDecodeEx pozivi dijele istu politiku
Registrirani nativni i vanjski backendovi koriste već validirane interne putove, izbjegavajući dvostruki obilazak grafa pri normalnom dekodiranju
THPDFJBIG2GlobalsPool.Register prihvaća samo valjani global-only tok segmenata, sprječavajući ulazak malformiranih zajedničkih rječnika u ponovnu upotrebu na razini dokumenta
Standalone JBIG2 datoteke proslijeđene s Embedded = False zadržavaju svoj zasebni datotekom-orijentirani put dekodiranja
Vidi JBIG2 compression support, THPDFJBIG2Decoder.LoadFromByteArray i THPDFJBIG2Decoder.LoadRegionFromByteArray