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