aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_pages.cc
AgeCommit message (Collapse)Author
2023-07-29Check for missing mediaboxesm-holger
2023-05-27Code tidy - reflow comments and stringsm-holger
2023-05-21Rerun clang-formatJay Berkenbilt
2023-05-21Globally replace 'this->m->' with 'm->'m-holger
Using search and replace.
2023-05-19Use QPDFObjGen::set in QPDF::getAllPagesm-holger
2022-10-01Code tidy: use QPDF::toS and QPDF::toI where possiblem-holger
2022-09-21Replace calls to QUtil::int_to_string with std::to_stringm-holger
2022-09-07Revert getOwningQPDF, and add getQPDF that returns a referenceJay Berkenbilt
2022-09-01Merge pull request #730 from m-holger/allpagesJay Berkenbilt
Tidy QPDF::getAllPagesInternal and QPDF::pushInheritedAttributesToPageInternal
2022-08-28Add optional parameter allow_nullptr to QPDFObjectHandle::getOwningQPDFm-holger
Also, inline method and add optional parameter error_msg.
2022-08-01Fix warnings in QPDF::getAllPagesInternalm-holger
2022-08-01Tune QPDF::getAllPagesInternalm-holger
Avoid calling getAllPagesInternal for each /Page object.
2022-08-01Remove redundant parameter from QPDF::getAllPagesInternalm-holger
2022-07-24QPDFObjGen : tidy QPDF private methodsm-holger
Change method signatures to use QPDFObjGen. Use QPDFObjGen methods where possible. Remove redundant QPDF::objGenToIndirect.
2022-06-25Track whether certain page modifying methods have been calledJay Berkenbilt
We need to know whether pushInheritedAttributesToPage or getAllPages have been called when generating JSON output. When reading the JSON back in, we have to call the same methods so that object numbers will line up properly.
2022-06-25TODO: abandon (again) and update notes about QPDFPagesTreeJay Berkenbilt
2022-06-25Add warnings for some additional page tree repairJay Berkenbilt
2022-05-04Remove remaining incorrect assert calls from implementationJay Berkenbilt
2022-04-30Code clean up: use range-style for loops wherever possibleJay Berkenbilt
Where not possible, use "auto" to get the iterator type. Editorial note: I have avoid this change for a long time because of not wanting to make gratuitous changes to version history, which can obscure when certain changes were made, but with having recently touched every single file to apply automatic code formatting and with making several broad changes to the API, I decided it was time to take the plunge and get rid of the older (pre-C++11) verbose iterator syntax. The new code is just easier to read and understand, and in many cases, it will be more effecient as fewer temporary copies are being made. m-holger, if you're reading, you can see that I've finally come around. :-)
2022-04-24Add new QPDF::warn that takes most of QPDFExc's argumentsJay Berkenbilt
2022-04-04Programmatically apply new formatting to codeJay Berkenbilt
Run this: for i in **/*.cc **/*.c **/*.h **/*.hh; do clang-format < $i >| $i.new && mv $i.new $i done
2022-02-08WHITESPACE ONLY -- expand tabs in source codeJay Berkenbilt
This comment expands all tabs using an 8-character tab-width. You should ignore this commit when using git blame or use git blame -w. In the early days, I used to use tabs where possible for indentation, since emacs did this automatically. In recent years, I have switched to only using spaces, which means qpdf source code has been a mixture of spaces and tabs. I have avoided cleaning this up because of not wanting gratuitous whitespaces change to cloud the output of git blame, but I changed my mind after discussing with users who view qpdf source code in editors/IDEs that have other tab widths by default and in light of the fact that I am planning to start applying automatic code formatting soon.
2022-01-27Remove some if statements and simplify some boolean expressionsm-holger
Use QPDFObjectHandle::isNameAndEquals, isDictionaryOfType and isStreamOfType.
2021-11-03Make QPDF::findPage public (fixes #516)Jay Berkenbilt
This was originally not public because I wanted to get rid fo the pages cache, but I recently realized there were deep reasons not to do that, and the author of pikepdf wanted this, so I decided to make it public.
2021-04-05QPDF::addPage*: handle duplicate pages more robustlyJay Berkenbilt
2021-03-22Remove some assertions that are not necessarily true (fixes #514)Jay Berkenbilt
Operations that add the same object to multiple places in the pages tree are throwing exceptions and then later causing assertion failures. The assert calls shouldn't be there.
2020-02-22Handle root /Pages pointing to other than page tree root (fixes #398)Jay Berkenbilt
2019-08-19Attempt to repair /Type key in pages nodes (fixes #349)Jay Berkenbilt
2019-06-25Convert some cases of logic_error to runtime_errorJay Berkenbilt
There were a few cases that could be caused by invalid input rather than bugs in the code which were throwing logic_error instead of runtime_error.
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-01-30Clean up some private functionsJay Berkenbilt
2019-01-29Handle direct page objects (fixes #164)Jay Berkenbilt
2019-01-29Clarify documentation for copyForeignObject regarding pagesJay Berkenbilt
Make explicit that copyForeignObject can be used on page objects and will copy them properly but not update the pages tree.
2019-01-29Resolve duplicated page objects (fixes #268)Jay Berkenbilt
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.
2018-03-06Properly handle pages with no contents (fixes #194)Jay Berkenbilt
Remove calls to assertPageObject(). All cases in the library that called assertPageObject() work fine if you don't call assertPageObject() because nothing assumes anything that was being checked by that call. Removing the calls enables more files to be successfully processed.
2017-08-22Push QPDF member variables into a nested classJay Berkenbilt
Pushing member variables into a nested class enables addition of new member variables without breaking binary compatibility.
2015-02-22Detect loops in /Pages structureJay Berkenbilt
Pushing inherited objects to pages and getting all pages were both prone to stack overflow infinite loops if there were loops in the Pages dictionary. There is a general weakness in the code in that any part of the code that traverses the Pages structure would be prone to this and would have to implement its own loop detection. A more robust fix may provide some general method for handling the Pages structure, but it's probably not worth doing. Note: addition of *Internal2 private functions was done rather than changing signatures of existing methods to avoid breaking compatibility.
2014-12-29Handle page tree node with no /TypeJay Berkenbilt
Original reported here: https://bugs.launchpad.net/ubuntu/+source/qpdf/+bug/1397413 The PDF specification says that the /Type key for nodes in the pages dictionary (both /Page and /Pages) is required, but some PDF files omit them. Use the presence of other keys to determine the type of pages tree node this is if the type key is not found.
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.
2013-06-14Use QPDFObjectHandle::getObjGen() where appropriateJay Berkenbilt
In internal code and examples, replace calls to getObjectID() and getGeneration() with calls to getObjGen() where possible.
2013-06-14Promote QPDF::ObjGen to top-level object QPDFObjGenJay Berkenbilt
2013-03-04Remove all old-style casts from C++ codeJay Berkenbilt
2012-07-29Fix spelling errorsJay Berkenbilt
2012-07-11Support copying objects from another QPDF objectJay Berkenbilt
This includes QPDF::copyForeignObject and supporting foreign objects as arguments to addPage*.
2012-07-07Build this->all_pages while traversing with pushInheritedAttributesToPageTobias Hoffmann
2012-07-05Limited inheritance to the attributes explicitly listed in the PDF specTobias Hoffmann
Previous versions of qpdf incorrectly passed arbitrary objects from /Pages objects down to individual pages in direct contradition with the PDF specification. These are now left in /Pages. When intermediate /Pages nodes are being discarded as when the /Pages tree is being flattened, a warning is issued when unknown keys are encountered.
2012-07-04Added public method QPDF::pushInheritedAttributesToPageTobias Hoffmann
Refactored optimizePagesTree to pushInheritedAttributesToPage and made public
2012-06-24Fixed missing throwTobias Hoffmann
2012-06-22Add QPDF::emptyPDF() and pdf_from_scratch test codeJay Berkenbilt