-
Remove const qualifier from getTypeCode and get getTypeName methods of QPDFObjectHandle, make them work properly for indirect objects, and exercise them much better in the test suite.
-
Make remaining calls to fopen and strerror use strerror_s and fopen_s on MSVC.
-
fopen was previuosly called wrapped by QUtil::fopen_wrapper, but QUtil::safe_fopen does this itself, which is less cumbersome.
-
Put a specific comment marker next to every piece of code that MSVC gives warning 4996 for. This warning is generated for calls to functions that Microsoft considers insecure or deprecated. This change is in preparation for fixing all these cases even though none of them are actually incorrect or insecure as used in qpdf. The comment marker makes them easier to find so they can be fixed in subsequent commits.
-
Add QUtil::hex_encode to encode binary data has a hexadecimal string, and use it in place of sprintf where possible.
-
Change iteration to use size_t instead of int. The code should be equivalent in all reasonable cases, but the original way this was coded was causing a test failure with gcc 4.8.0 on ppc64. See https://bugzilla.redhat.com/show_bug.cgi?id=915321 for additional information.
-
When caching objects in an object stream, only cache objects that still resolve to that stream. See Changelog mod from this commit for details.
-
Fix exit status for case of errors without warnings, continue after errors when possible, add test case for parsing a file with content stream errors on some but not all pages.
-
Also move writing to null and parsing of content streams out of the wrong if block.
-
Change object type Keyword to Operator, and place the order of the object types in object_type_e in the same order as they are mentioned in the PDF specification. Note that this change only breaks backward compatibility with code that has not yet been released.
-
Add virtual methods to QPDFObject, wrappers to QPDFObjectHandle, and implementations to all the QPDF_Object types.
-
This method allows parsing of the PDF objects in a content stream or array of content streams.
-
This fix eliminates a false test failure on some platforms and makes the binary test work properly whether characters with the high bit set, when treated as integers, are negative or not.
-
Also add copyright notice to a few public headers that were missing one.
-
When writing a new stream, always remove /Crypt even if we are not otherwise able to filter the stream.
-
Original code was written before we could shallow copy objects, so all the filtering was done by suppressing the output of certain keys and replacing them with other keys. Now we can simplify the code greatly by modifying shallow copies of dictionaries in place.
-
Read and write support is implemented for /V=5 with /R=5 as well as /R=6. /R=5 is the deprecated encryption method used by Acrobat IX. /R=6 is the encryption method used by PDF 2.0 from ISO 32000-2.
-
Test cases added in a future commit since they depend on /R=6 support.
-
Change variable name for better clarity.
-
I noticed a test output file that was not accessed in the test suite and added a test case for it.
-
All version operations are now fully aware of extension levels.
-
This file used to exercise a zero offset test case when qpdf would visit every object in the file. After the next commit, qpdf no longer touches unreferenced objects, so a reference had to be added to continue to have this file exercise the zero offset case.
-
For linearization tests where we are actually comparing the exact output of the test with a known file, uncompress stream data so we can see what's there. This makes looking at future changes a little easier.
-
Allowing users to subclass InputSource and Pipeline to read and write from/to arbitrary sources provides the maximum flexibility for users who want to read and write from other than files or memory.
-
This replaces a PDF from the wild that I didn't want to include in the test suite but used to verify the original fix.
-
Previously only whitespace and comments did it. This fix is needed for object streams whose last object is a literal (name, integer, real, string) not terminated by space or newline.
-
Use --encryption-file-password, if given, in addition to --password as a source for passwords for files specified in --pages.