• During parsing of an object, sometimes parts of the object have to be
    resolved. An example is stream lengths. If such an object directly or
    indirectly points to the object being parsed, it can cause an infinite
    loop. Guard against all cases of re-entrant resolution of objects.
    Jay Berkenbilt authored
     
    Browse File »
  • This is CVE-2017-9208.
    
    The QPDF library uses object ID 0 internally as a sentinel to
    represent a direct object, but prior to this fix, was not blocking
    handling of 0 0 obj or 0 0 R as a special case. Creating an object in
    the file with 0 0 obj could cause various infinite loops. The PDF spec
    doesn't allow for object 0. Having qpdf handle object 0 might be a
    better fix, but changing all the places in the code that assumes objid
    == 0 means direct would be risky.
    Jay Berkenbilt authored
     
    Browse File »

  • For non-encrypted files, determinstic ID generation uses file contents
    instead of timestamp and file name. At a small runtime cost, this
    enables generation of the same /ID if the same inputs are converted in
    the same way multiple times.
    Jay Berkenbilt authored
     
    Browse File »



  • Space rather than newline after xref, missing /ID in trailer for
    encrypted file.  This enables qpdf to handle some files that xpdf can
    handle.  Adobe reader can't necessarily handle them.
    Jay Berkenbilt authored
     
    Browse File »










  • Move object parsing code from QPDF to QPDFObjectHandle and
    parameterize the parts of it that are specific to a QPDF object.
    Provide a version that can't handle indirect objects and that can be
    called on an arbitrary string.
    
    A side effect of this change is that the offset used when reporting
    invalid stream length has changed, but since the new value seems like
    a better value than the old one, the test suite has been updated
    rather than making the code backward compatible.  This only effects
    the offset reported for invalid streams that lack /Length or have an
    invalid /Length key.
    
    Updated some test code and exmaples to use QPDFObjectHandle::parse.
    
    Supporting changes include adding a BufferInputSource constructor that
    takes a string.
    Jay Berkenbilt authored
     
    Browse File »




  • QPDFObjectHandle::{new,is,assert}Reserved, QPDF::replaceReserved
    provide a mechanism to add objects to a PDF file when there are
    circular references.  This is a prerequisite to copying objects from
    one PDF to another.
    Jay Berkenbilt authored
     
    Browse File »

  • Breaking API change: length parameter has disappeared from the
    StreamDataProvider version of QPDFObjectHandle::replaceStreamData
    since it is no longer necessary to compute it in advance.  This
    breaking change is justified by the fact that removing the length
    parameter provides the caller an opportunity to simplify the calling
    code.
    Jay Berkenbilt authored
     
    Browse File »