-
Provide a convenient way of accessing rectangles.
-
Give objects descriptions and context so it is possible to issue warnings instead of fatal errors for attempts to access objects of the wrong type.
-
Expose Pl_QPDFTokenizer, and have it do more of the work of managing the token filter's pipeline.
-
Implement a TokenFilter class and refactor Pl_QPDFTokenizer to use a TokenFilter class called ContentNormalizer. Pl_QPDFTokenizer is now a general filter that passes data through a TokenFilter.
-
The latter catches underflow/overflow.
-
Files written in PCLm mode have to be created in a very specific way. qpdf doesn't know how to create PCLm files from scratch. All it knows how to do is to write an already valid file in a suitable way. Therefore there is no command-line support for PCLm.
-
This commit adds several API methods that enable control over which types of filters QPDF will attempt to decode. It also adds support for /RunLengthDecode and /DCTDecode filters for both encoding and decoding.
-
For std::string and std::vector, replace operator[] with at. This was done using an automated process. See README.hardening for details.
-
In internal code and examples, replace calls to getObjectID() and getGeneration() with calls to getObjGen() where possible.
-
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.
-
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.
-
When caching objects in an object stream, only cache objects that still resolve to that stream. See Changelog mod from this commit for details.
-
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.
-
When writing a new stream, always remove /Crypt even if we are not otherwise able to filter the stream.
-
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.
-
Change variable name for better clarity.
-
All version operations are now fully aware of extension levels.
-
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.
-
Previous commit lost coverage case for buffer-based replaceStreamData.
-
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.
-
Add --copy-encryption and --encryption-file-password options to qpdf. Also strengthen test suite for copying encryption. The strengthened test suite would have caught the failure to preserve AES and the failure to update the file version, which was invalidating the encrypted data.
-
Method to copy encryption parameters from another file. Adapted from existing code to copy encryption parameters from the original file.
-
This way we don't have to hard-code the name of a second file in the test driver for tests that require one.
-
Throw an exception that directs the user to QPDF::copyForeignObject.
-
This includes QPDF::copyForeignObject and supporting foreign objects as arguments to addPage*.
-
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.