Επικύρωση γράφου τμημάτων JBIG2

Το HotPDF επικυρώνει τα ενσωματωμένα streams εικόνας JBIG2 και JBIG2Globals πριν ένας εγγενής ή εξωτερικός αποκωδικοποιητής τα παραλάβει

Ο επικυρωτής εκτελεί μία φραγμένη διαδρομή τμημάτων, ακολουθούμενη από επαναληπτική διάσχιση του γράφου εξαρτήσεων, χρησιμοποιώντας ευρετηριαμένη αναζήτηση αριθμού τμήματος αντί για επαναλαμβανόμενες σαρώσεις

Επικύρωση πριν την προσαρμοσμένη επεξεργασία

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 αναφέρει τους αριθμούς τμημάτων και ακμών, τους δηλωμένους νέα σύμβολα, το μέγιστο βάθος εξαρτήσεων, και το stream, τη μετατόπιση byte, τον αριθμό τμήματος, και τον αριθμό αναφοράς που σχετίζονται με την πρώτη αποτυχία

Οι προϋπολογισμοί ορίζονται σε μια εγγραφή TJBIG2SegmentGraphValidationOptions της οποίας τα πεδία MaxSegments, MaxReferencesPerSegment, MaxTotalReferences, MaxReferenceDepth και MaxSymbols οριοθετούν κάθε διάσχιση

Η τελική κατάσταση είναι μια τιμή TJBIG2SegmentGraphValidationStatus που κυμαίνεται από not-checked και valid έως την απόρριψη επιλογών, τις αποτυχίες κεφαλίδας και αναφορών, τους κύκλους και τις παραβιάσεις λεξικού συμβόλων, και η HPDFJBIG2SegmentGraphValidationStatusName την αποδίδει ως κείμενο

Το FailureStreamKind χρησιμοποιεί το TJBIG2SegmentStreamKind για να δηλώσει αν η πρώτη αποτυχία βρέθηκε στο stream των globals (jbsskGlobals) ή στο stream της εικόνας (jbsskImage)

Το THPDFJBIG2Decoder.LastSegmentGraphValidationInfo διατηρεί την ίδια αναφορά μετά την LoadFromByteArray ή την LoadRegionFromByteArray

Συνθήκες fail-closed

Η επικύρωση απορρίπτει ελαττωματικές ή αποκομμένες κεφαλίδες, κεφαλίδες αυτόνομου αρχείου εντός ενσωματωμένων streams, απαγορευμένους πίνακες σύντομων και υπερμεγεθών μακρών αναφορών, διπλότυπα ή απόντα αναγνωριστικά τμημάτων, εξαρτήσεις προς τα εμπρός στη φυσική ροή του stream, κύκλους εξαρτήσεων, υπερβολικό βάθος, και υπέρβαση των ρυθμισμένων προϋπολογισμών τμημάτων ή ακμών

Τα τμήματα εικόνας πρέπει να χρησιμοποιούν συσχέτιση σελίδας 1, τα global τμήματα πρέπει να χρησιμοποιούν συσχέτιση σελίδας 0, και ένα global τμήμα δεν μπορεί να εξαρτάται από τμήμα εικόνας

Τα ενσωματωμένα τμήματα end-of-page, end-of-file, και χρωματικής παλέτας απορρίπτονται, όπως και τα τμήματα region μόνο-σελίδας και page-information τοποθετημένα σε JBIG2Globals

Οι κεφαλίδες λεξικού συμβόλων επιθεωρούνται πριν την αποκωδικοποίηση, ώστε οι δηλωμένοι αριθμοί νέων και εξαγόμενων συμβόλων, οι συγκεντρωτικές δεξαμενές συμβόλων input, και οι αδύνατοι συνολικοί αριθμοί εξαγωγής να αποτυγχάνουν πριν την εκχώρηση bitmap

Όριο αποκωδικοποιητή και cache globals

Οι THPDFJBIG2Decoder, HPDFJBIG2NativeMMRDecode, HPDFJBIG2NativeRegionDecode, και οι ενσωματωμένες κλήσεις HPDFJBIG2DecDecodeEx μοιράζονται την ίδια πολιτική

Οι καταχωρημένοι εγγενείς και εξωτερικοί backends χρησιμοποιούν ήδη επικυρωμένα εσωτερικά μονοπάτια, αποφεύγοντας μια διπλή διαδρομή γράφου στην κανονική αποκωδικοποίηση

Η THPDFJBIG2GlobalsPool.Register δέχεται μόνο ένα έγκυρο global-only stream τμημάτων, εμποδίζοντας ελαττωματικά κοινόχρηστα λεξικά από το να εισέλθουν στην επαναχρησιμοποίηση επιπέδου εγγράφου

Τα αυτόνομα αρχεία JBIG2 που περνούν με Embedded = False διατηρούν το ξεχωριστό τους μονοπάτι αποκωδικοποίησης προσανατολισμένο σε αρχείο

Δείτε την Υποστήριξη συμπίεσης JBIG2, την THPDFJBIG2Decoder.LoadFromByteArray, και την THPDFJBIG2Decoder.LoadRegionFromByteArray