Age | Commit message (Collapse) | Author |
|
Instead of calling assert for problems found during checking
linearization data, throw an exception which is later caught and
issued as an error. Ideally we would handle errors more robustly, but
this is still a significant improvement.
|
|
On certain operations, such as iterating through all objects and
adding new indirect objects, walk through the entire object structure
and explicitly resolve any indirect references to non-existent
objects. That prevents new objects from springing into existence and
causing the previously dangling references to point to them.
|
|
|
|
|
|
|
|
Also add some additional methods for detecting form field types to
assist in the json creation and for later use.
|
|
|
|
|
|
Thanks to @p-cher for supplying a patch.
|
|
Instead of directly putting the contents of the annotation appearance
streams into the page's content stream, add commands to render the
form xobjects directly. This is a more robust way to do it than the
original solution as it works properly with patterns and avoids
problems with resource name clashes between the pages and the form
xobjects.
|
|
Flatten annotations by integrating their appearance streams into the
content stream of the containing page. In the case of form fields,
only flatten if /NeedAppearance is false (or equivalently absent). If
flattening form fields, also remove /AcroForm from the document
catalog.
|
|
|
|
Generate page content fragment for rendering appearance streams
including all matrix calculation.
|
|
|
|
|
|
Unparse is admittedly strange, but I'd rather be strange and
consistent, and everything else in the qpdf library uses unparse to
serialize. (If you're reading this, the convention of using "unparse"
comes from the "clu" programming language.)
|
|
Also move tests to libtests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wrap an object in an array if it is not already an array.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This fix allows qpdf to compile/test cleanly with gcc 8.
|
|
Rather than keeping a list of buffers for every write, accumulate
bytes in a single buffer, doubling the size of the buffer when needed
to accommodate new data.
This is not the best possible implementation, but the change was
implemented in this way to avoid changing the shape of Pl_Buffer and
thus breaking backward compatibility.
|
|
|
|
A previous fix introduced a potentially memory overrun under certain
rare conditions. The test suite now once again passes with address
sanitizer.
|
|
There were a few places in the code that were checking that a pointer
wasn't null before deleting it, even though C++ has always allowed
delete 0. Most of the code did not perform these checks.
|
|
CR, CRLF, and LF are all supposed to be treated as LF; only one EOL is
to be ignored after backslash.
|
|
|
|
Turns out you can keep adding zero to a number over and over again and
it just doesn't get any bigger. Who would have known?
|
|
During periods of intensive operation on a specific file, this method
can reduce the overhead of repeated open/close operations.
|
|
|
|
|
|
|
|
|
|
|
|
ClosedFileInputSource is an input source that keeps the file closed
when not reading it.
|
|
If we are unable to filter a page's content streams, don't attempt to
remove objects from the page's resource dictionary. Also provide a
command line option to suppress resource removal in case we ever need
this as a workaround for some bug or broken PDF files.
|
|
If parsing content streams is treated as a warning, there is no way
for a caller to know if a parsing operation has failed. This is very
dangerous and will likely result in data loss when token filters are
parser callbacks are in use.
|