aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFWriter.cc
AgeCommit message (Collapse)Author
2019-08-24Add flags to control zlib compression level (fixes #113)Jay Berkenbilt
2019-08-22Remove array null flatteningJay Berkenbilt
For some reason, qpdf from the beginning was replacing indirect references to null with literal null in arrays even after removing the old behavior of flattening scalar references. This seems like a bad idea.
2019-06-23Allow set*EncryptionParameters before filename iset (fixes #336)Jay Berkenbilt
2019-06-22In shippable code, favor smart pointers (fixes #235)Jay Berkenbilt
Use PointerHolder in several places where manually memory allocation and deallocation were being used. This helps to protect against memory leaks when exceptions are thrown in surprising places.
2019-06-22QPDFWriter: clean up overloaded functionsJay Berkenbilt
In a small number of cases, it makes sense to replace an overloaded function with a function that takes a default argument. We can do this now because we've already broken binary compatibility since the last release.
2019-06-21Fix bugs found by fuzz testsJay Berkenbilt
* Several assertions in linearization were not always true; change them to run time errors * Handle a few cases of uninitialized objects * Handle pages with no contents when doing form operations * Handle invalid page tree nodes when traversing pages
2019-06-21Fix sign and conversion warnings (major)Jay Berkenbilt
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.
2019-06-15Fix problems found in fuzz corpusJay Berkenbilt
2019-06-09Handle empty DecodeParams array for (fixes #331)Jay Berkenbilt
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.
2019-01-29Fix logic for when to compress object and xref streams (fixes #271)Jay Berkenbilt
2019-01-17Modernize encryption API for more granularityJay Berkenbilt
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.
2019-01-04Add QPDFWriter::getFinalVersion (fixes #266)Jay Berkenbilt
2019-01-04Fix dangling references (fixes #240)Jay Berkenbilt
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.
2018-08-12Remove some extraneous null pointer checks (fixes #234)Jay Berkenbilt
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.
2018-08-05Fix infinite loop on small files with progress reporting (fixes #230)Jay Berkenbilt
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?
2018-06-22Add progress reporting for QPDFWriter (fixes #200)Jay Berkenbilt
2018-06-22Correct incorrect commentJay Berkenbilt
2018-05-12newline before endstream fix for object streams (fixes #205)Jay Berkenbilt
2018-02-19Implement TokenFilter and refactor Pl_QPDFTokenizerJay Berkenbilt
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.
2018-02-19Add option to save pass 1 of lineariziationJay Berkenbilt
This is useful only for debugging the linearization code.
2018-02-05Fix linearization for files with nonstandard ID lengthJay Berkenbilt
2018-02-04Fix indentationJay Berkenbilt
2017-12-25Correct errors in PNG filters and make use from libraryJay Berkenbilt
2017-09-12Improve message for stream decoding errorJay Berkenbilt
Tweak the message so that we inform the user that we are mitigating data loss.
2017-08-29Replace all atoi calls with QUtil::string_to_intJay Berkenbilt
The latter catches underflow/overflow.
2017-08-22Spell checkJay Berkenbilt
2017-08-22Push QPDFWriter member variables into a nested classJay Berkenbilt
2017-08-22Improve pclm parameter settingsJay Berkenbilt
2017-08-22Combine writePCLm with writeStandardJay Berkenbilt
Reduce code duplication
2017-08-22Combine PCLm header into writeHeaderJay Berkenbilt
2017-08-22Remove duplicated coverage casesJay Berkenbilt
Remove duplicated coverage cases from Sahil's code so existing test suite passes.
2017-08-22QPDFWriter: Add setPCLm() and writePCLm() methodsSahil Arora
* Add support for PCLm using setPCLm() and writePCLm() methods in QPDFWriter.hh and QPDFWriter.cc * Add a function writePCLmHeader() for PCLm header in QPDFWriter
2017-08-21Precheck streams by defaultJay Berkenbilt
There is no need for a --precheck-streams option. We can do the precheck without imposing any penalty, only re-encoding the stream if it fails the first time.
2017-08-21Enable finer grained control of stream decodingJay Berkenbilt
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.
2017-08-12Fix infinite loop in QPDFWriter (fixes #143)Jay Berkenbilt
2017-08-12Fix --newline-before-endstream option (fixes #133)Jay Berkenbilt
Add a newline unconditionally before endstream even if a newline was already written as part of the stream data.
2017-08-12Prevent a division by zero error (fixes #141)Jay Berkenbilt
Bad /W in an xref stream could cause a division by zero error. Now this is handled as a special case.
2017-07-29Add newline-before-endstream option (fixes #103)Jay Berkenbilt
2017-07-29Fix exception catchJay Berkenbilt
2017-07-29Add option to preserve unreferenced objectsJay Berkenbilt
2017-07-28Add precheck streams capabilityJay Berkenbilt
When requested, QPDFWriter will do more aggress prechecking of streams to make sure it can actually succeed in decoding them before attempting to do so. This will allow preservation of raw data even when the raw data is corrupted relative to the specified filters.
2015-11-10Remove some ABI compatibility private methodsJay Berkenbilt
Since we have to bump soname, remove some private methods that were just there for binary compatibility
2015-10-31Implement deterministic IDJay Berkenbilt
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.
2014-06-07Handle indirect stream filter/decode parametersJay Berkenbilt
QPDFWriter was trying to make /Filter and /DecodeParms direct in all cases, but there are some cases where /DecodeParms may refer to a stream, which can't be direct. QPDFWriter doesn't actually need /DecodeParms to be direct in that case because it won't be able to filter the stream. Until we can handle this type of stream, just don't make /Filter and /DecodeParms direct if we can't filter the stream anyway. Fixes #34
2014-02-23Fix calculation of xref stream stream columnsJay Berkenbilt
Fix problem: if the last object in the first part of a linearized file had an offset that was below 65536 by less than the size of the hint stream, the xref stream was invalid and the resulting file is not usable.
2013-12-14Comments about incremental update supportJay Berkenbilt
Also remove some trivial, non-functional code.
2013-11-29Include <algorithm> for std::min, std::maxJay Berkenbilt
2013-10-18Warn when -accessibility=n will be ignoredJay Berkenbilt
Also accept -accessibility=n with 256 bit keys even though it will be ignored.
2013-10-18Security: replace operator[] with atJay Berkenbilt
For std::string and std::vector, replace operator[] with at. This was done using an automated process. See README.hardening for details.
2013-10-10Replace some assertions with std::logic_errorJay Berkenbilt
Ideally, the library should never call assert outside of test code, but it does in several places. For some cases where the assertion might conceivably fail because of a problem with the input data, replace assertions with exceptions so that they can be trapped by the calling application. This commit surely misses some cases and replaced some cases unnecessarily, but it should still be an improvement.