15 puan yazan GN⁺ 2025-08-04 | Henüz yorum yok. | WhatsApp'ta paylaş
  • PDF ayrıştırma, net bir sıra ve yapı temelinde çalışmalıdır; ancak gerçek dosyalar çoğu zaman bu kurala uymaz
  • cross-reference (xref) işaretçileri ve ofsetlerin bulunması sırasında çeşitli hatalar ve tutarsızlıklar ortaya çıkar
  • Pratikte birçok sorun, PDF başlığından önceki gereksiz veriler ya da işaretçi ve ofsetlerin yanlış konumlanması nedeniyle oluşur
  • PDF xref tablosunun kendisinin belirsiz veya hatalı biçimlendirilmiş olduğu pek çok durum da vardır
  • Bu yüzden başlıca görüntüleyiciler, standart dışı PDF dosyalarını da destekleyen ek mantıklar uygular

PDF ayrıştırmaya ideal yaklaşım

  • PDF ayrıştırma teorik olarak belirli adımlarla ilerler
    • Dosyanın başlangıcında sürüm başlığı yorumunu bulur
    • cross-reference (xref) işaretçisini bulur
    • Tüm nesne ofsetlerini toplar
    • trailer sözlüğünü bularak genel katalog yapısına erişir

PDF nesnelerine giriş

  • PDF nesneleri, sayı, string, sözlük gibi çeşitli PDF öğelerini sarmalayıp saklayan birimlerdir
  • Her nesne, obj/endobj işaretleri arasında bulunur
  • Nesneler, dolaylı referans (indirect reference, ör. 16 0 R) yöntemiyle birbirine bağlanır
  • Dosya içindeki nesne bölümlenmesi serbesttir; ancak bazı nesne türleri mutlaka dolaylı referans olmalıdır

cross-reference ofsetlerini bulma

  • PDF yapısında, nesne konumları için bir indeks görevi gören cross-reference (xref) tablosu bulunur
  • Dosyanın sonunda startxref ifadesiyle belirli bir bayt konumu işaretçi olarak belirtilir
  • Bu işaretçi xref konumunu gösterir; ancak spesifikasyon ile gerçek dosyalar arasında farklar vardır. Örneğin %EOF işaretinin aslında son satırda olması gerekirken, gerçek PDF’lerde son 1.024 bayt içindeki herhangi bir yerde olabilir
  • Gerçek dosyalarda işaretçi biçim hataları (startref vb.), satır sonu eksikliği gibi çeşitli varyasyonlar görülür

nesne ofsetlerini bulma

  • xref tablosunda sırasıyla xref, nesne başlangıç numarası ve nesne sayısı yer alır; her nesnenin ofseti/oluşturma numarası/durumu (n veya f) bir satıra yazılır
  • Birden fazla xref tablosu olabilir ya da bunlar /Prev girdisi üzerinden birbirine bağlanabilir

trailer sözlüğünün konumunu arama

  • startxref işaretinin üst tarafında trailer sözlüğü bulunur ve kök nesneyi bulmak için gerekli temel meta verileri içerir
  • Kök nesne temel alınarak tüm yapının yorumlanmasına başlanabilir

Gerçek dünya: beklenmedik sorunlar

  • PDF spesifikasyonuna uymayan çok sayıda dosya bulunduğundan, genel amaçlı ayrıştırıcılarla bunları işlemek zordur

  • cross-reference işaretçisi aramasında sık görülen başarısızlık durumları

    • İşaretçi dosya sonunda veya son 1.024 bayt içinde değildir
    • Yazım hataları (startref vb.)
    • İstisnai biçimler
  • 3.977 gerçek PDF örneği üzerinde yapılan incelemede, yaklaşık %0,5’inde xref bildirimi hatası bulundu

PDF içeriği sıfır olmayan bir ofsette başlıyor

  • Başlıktan önce gereksiz veri (junk) varsa, tüm bayt ofsetleri kayar ve startxref konumu bozulur
  • Ofsetler başlığın konumuna göre yeniden hesaplanmalı ve her iki konum da kontrol edilmelidir
  • Bu durum tüm hataların yaklaşık %50’sini oluşturur

xref işaretçisi xref tablosunun ortasını gösteriyor

  • Belirtilen ofset bazen xref tablosunun tam ortasına da denk gelebilir
  • 3.977 örnekten yaklaşık 5’inde görülmüştür

İşaretçi xref’in yakınında

  • Çoğu zaman işaretçi tam doğru değildir; ancak xref’in hemen öncesi veya sonrasındaki boşluk ya da satır sonu karakteri farkı kadar kaymıştır

İşaretçi doğru ama xref ofseti yanlış

  • xref tablosuna yazılmış ofsetlerin kendisi de hatalı olabilir
  • Bazı nesneler doğruyken geri kalanlar ofset hatası içerebilir

İlk işaretçi normal ama önceki ofset (/Prev) sorunlu

  • PDF düzenlenirken oluşan /Prev işaretçisinde hatalı değerlerin (ör. 0) saklandığı çok sayıda örnek vardır

xref tablosu anormal biçimde

  • Satır sonu olmadan xref ile sayıların bitişmesi, bildirilen nesne sayısından fazla giriş bulunması veya tablonun ortasında çöp veri yer alması gibi farklı durumlar görülebilir
  • Bu tür örnekler PdfPig gibi projelerde issue olarak sıkça raporlanmıştır

Sonuç

  • Spesifikasyona göre PDF ayrıştırma standart bir sırayla yapılmalıdır; ancak gerçek dosyaların çoğu böyle olmadığından ayrıştırma sırasında çeşitli sorunlar ortaya çıkar
  • Gerçek kullanımda PDF görüntüleyicileri, standart dışı PDF desteğini genişleten özellikleri temel olarak içerir
  • Bu özet, PDF spesifikasyonunun (toplam 1300 sayfanın 22 sayfasına karşılık gelen) yalnızca küçük bir ayrıştırma bölümünü ele aldı

Henüz yorum yok.

Henüz yorum yok.