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