all devices regression report - 2018-01-13-03:46:31 - 112021a361e9300d9cd0cde0bfc9e691a6e5d0d7
[email protected] Sat, 13 Jan 2018 03:46:31 -0800 (PST)
| Newsgroups | gmane.comp.printing.ghostscript.regression |
|---|---|
| Message-ID | <20180113114632.056F120404FA@i7> |
Differences in all devices errors using gs/examples files Previous Revision: 3012651caace0d2d4dd26631e0e10d81fdeab181 Current Revision: 112021a361e9300d9cd0cde0bfc9e691a6e5d0d7 commit 112021a361e9300d9cd0cde0bfc9e691a6e5d0d7 Author: Ken Sharp <[email protected]> AuthorDate: Sat Jan 13 10:45:32 2018 +0000 CommitDate: Sat Jan 13 10:45:32 2018 +0000 pdf_info.ps - gracefully handle circular Resource references Although not strictly part of Ghostscript, pdf_info.ps is used by customers and this is reasonably easy to improve. When checking for transparency, pdf_info.ps uses the Ghostscript PDF interpreter to do the work. However, other aspects of its operation (Media Sizes, Font use) aren't available from the PDF interpreter. When detecting Font usage, pdf_info.ps walks the Page Resource chain, and any the Resource chains of any Pattern or XObject Resources used on that page, as well as the Resources for any Annots (and also any XObject or Pattern Resources used by the Annots). If any of these Resource chains contains a circular reference (which they absolutely should not) then pdf_info will enter a loop and process unwil it exceeds the execution stack limit, throwing an error. In this commit we borrow the technique used by the PDF interpreter, we create a dictionary and every object which we inspect has its object number stored in that dictionary. Whenever we encounter a new object we first check to see if its number is in that dictionary. If it is, we know we've seen it before and this is (possibly) a circular reference. Even if it is not a circular reference, we've already checked that chain so we don't need to check it again. This isn't cluster checked. toolbin/pdf_info.ps new errors: errors that went away: errors that are not whitelisted: === ghostpdl/examples/transparency_example.ps === cp50 === === ghostpdl/examples/transparency_example.ps === psdrgb ===