JBIG2 Segment Grafiği Doğrulaması

HotPDF, gömülü JBIG2 görüntü ve JBIG2Globals stream'lerini native veya harici bir çözücüye ulaşmadan önce doğrular

Validator, tekrarlanan taramalar yerine indeksli segment numarası araması kullanarak sınırlı tek bir segment geçişi yapar, ardından yinelemeli bir dependency-graph dolaşımı gerçekleştirir

Özel işlemeden önce doğrulama

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, segment ve kenar sayılarını, bildirilen yeni sembolleri, maksimum dependency derinliğini ve ilk başarısızlıkla ilişkili stream'i, byte ofsetini, segment numarasını ve referans numarasını raporlar

Bütçeler, MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth ve MaxSymbols alanları her dolaşımı sınırlayan TJBIG2SegmentGraphValidationOptions record'unda yaşar

Son durum; denemedi ve geçerli'den options reddine, başlık ve referans başarısızlıklarına, döngülere ve sembol sözlüğü ihlallerine uzanan bir TJBIG2SegmentGraphValidationStatus değeridir ve HPDFJBIG2SegmentGraphValidationStatusName bunu metne çevirir

FailureStreamKind, ilk başarısızlığın globals stream'inde (jbsskGlobals) mi yoksa image stream'inde (jbsskImage) mi bulunduğunu TJBIG2SegmentStreamKind ile bildirir

THPDFJBIG2Decoder.LastSegmentGraphValidationInfo, LoadFromByteArray veya LoadRegionFromByteArray sonrasında aynı raporu tutar

Fail closed koşulları

Doğrulama; bozuk veya kesik başlıkları, gömülü stream'lerdeki standalone dosya başlıklarını, yasak olan kısa ve aşırı uzun referans tablolarını, yinelenen veya eksik segment tanımlayıcılarını, fiziksel olarak ileriye dönük dependency'leri, dependency döngülerini, aşırı derinliği ve yapılandırılmış segment ya da kenar bütçesi aşmalarını reddeder

Görüntü segmentleri page association 1 kullanmalı, global segmentler page association 0 kullanmalıdır ve bir global segment bir görüntü segmentine bağımlı olamaz

Gömülü end-of-page, end-of-file ve renk paleti segmentleri reddedilir; JBIG2Globals içine yerleştirilen page-only region ve page-information segmentleri de öyle

Sembol sözlüğü başlıkları decoding'ten önce incelenir; böylece bildirilen yeni ve dışa aktarılan sembol sayıları, birleşik giriş sembol havuzları ve imkânsız dışa aktarma toplamları, bitmap ayrılmadan önce başarısız olur

Decoder ve globals cache sınırı

THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode ve gömülü HPDFJBIG2DecDecodeEx çağrıları aynı politikayı paylaşır

Kayıtlı native ve harici backend'ler, zaten doğrulanmış iç yolları kullanır; böylece normal decoding'de gereksiz bir graph geçişi yapılmaz

THPDFJBIG2GlobalsPool.Register yalnızca geçerli, yalnızca global içeren bir segment stream'ini kabul eder; böylece bozuk paylaşılan sözlükler belge düzeyinde yeniden kullanıma giremez

Embedded = False ile verilen standalone JBIG2 dosyaları, dosya odaklı ayrı çözme yollarını korur

Ayrıca bakınız: JBIG2 sıkıştırma desteği, THPDFJBIG2Decoder.LoadFromByteArray ve THPDFJBIG2Decoder.LoadRegionFromByteArray