Age | Commit message (Collapse) | Author |
|
This makes all integer type conversions that have potential data loss
explicit with calls that do range checks and raise an exception. After
this commit, qpdf builds with no warnings when -Wsign-conversion
-Wconversion is used with gcc or clang or when -W3 -Wd4800 is used
with MSVC. This significantly reduces the likelihood of potential
crashes from bogus integer values.
There are some parts of the code that take int when they should take
size_t or an offset. Such places would make qpdf not support files
with more than 2^31 of something that usually wouldn't be so large. In
the event that such a file shows up and is valid, at least qpdf would
raise an error in the right spot so the issue could be legitimately
addressed rather than failing in some weird way because of a silent
overflow condition.
|
|
This is the type we need for the underlying zlib implementation.
|
|
|
|
|
|
|
|
|
|
|
|
Temporarily skip fuzz tests on Windows. There are Windows-specific
failures to address later.
|
|
|
|
|
|
On read, ignore /DecodeParms when empty list; on write, delete it.
Some files have been found that include an empty list for
/DecodeParms, but this is not technically compliant with the spec, and
the only sensible interpretation is to treat it as if there are no
decode parameters.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The preservation of outlines didn't provide very useful behavior
anyway as it copied all outlines but most didn't work. This
implementation also caused a very significant performance hit and so
is being reverted until a proper solution can be coded. The eventual
solution will not be compatible with the reverted solution anyway, so
it's best not to leave this in.
|
|
JSON serialization was preserving the value as presented, but JSON
doesn't accept decimal values without a 0 before the decimal point.
|
|
|
|
Also add test cases for additional coverage on image optimization.
|
|
Do not include the trailing EI, and handle cases where EI is not
preceded by a delimiter. Such cases have been seen in the wild.
|
|
|
|
This hasn't worked or been exercised in years since Adobe stopped
releasing a Linux version of reader.
|
|
|
|
We've actually seen a PDF file in the wild that contained EI
surrounded by delimiters inside the image data, which confused qpdf's
naive code. This significantly improves EI detection.
|
|
The inline image token erroneously included the delimiter that
followed EI. The ObjectHandle created from it was correct.
|
|
|
|
|
|
When linearizing a file or getting the list of all pages in a file,
detect if the pages tree contains a duplicated page object and, if so,
shallow copy it. This makes it possible to have a one to one mapping
of page positions to page objects.
|
|
|
|
|
|
Support conversion of pages to form XObjects and placement of form
XObjects on pages.
|
|
|
|
Add getAttribute for handling inheritable page attributes, and fix
getPageImages and annotation flattening code to use it.
|
|
If we end up using our fallback font size when generating appearances
for text fields, reflect that in the Tf operator used in the
appearance stream.
|
|
When generating appearance streams for variable text annotations,
properly handle the cases of there being no appearance dictionary, no
appearance stream, or an appearance stream with no BMC..EMC marker.
|
|
With the exception of form field annotations when /NeedAppearances is
true, remove annotations that don't have appearance streams when
flattening. There is no reason to keep these when flattening since
they are invisible. This may include unchecked checkboxes, unshown
popup windows, etc.
|
|
Allow fine control over how passwords are encoded for writing, and
allow password for reading to be given as a hexademical encoded
string. Allow suppression of password recovery as a means to ensure
that the password you specify is actually the right one.
|
|
|
|
|
|
|
|
Setting encryption permissions for R >= 3 set permission bits in
groups corresponding to menu options in Acrobat 5. The new API allows
the bits to be set individually.
|
|
|
|
|
|
The tests are in a separate commit so the bug-fix commit can be taken
as a patch for older versions.
|
|
|
|
|