summaryrefslogtreecommitdiff
path: root/source/pdf
AgeCommit message (Collapse)Author
2017-11-09Bug 698353: Avoid having our API depend on DEBUG/NDEBUG.Robin Watts
Currently, our API uses static inlines for fz_lock and fz_unlock, the definitions for which depend on whether we build NDEBUG or not. This isn't ideal as it causes problems when people link a release binary with a debug lib (or vice versa). We really want to continue to use static inlines for the locking functions as used from MuPDF, as we hit them hard in the keep/drop functions. We therefore remove fz_lock/fz_unlock from the public API entirely. Accordingly, we move the fz_lock/fz_unlock static inlines into fitz-imp.h (an internal header), together with the fz_keep_.../fz_drop_... functions. We then have public fz_lock/fz_unlock functions for any external callers to use that are free of compilications. At the same time, to avoid another indirection, we change from holding the locking functions as a pointer to a struct to a struct itself.
2017-11-08Silence warning.Tor Andersson
2017-11-08Bug 689699: Avoid buffer overrun.Robin Watts
When cleaning a pdf file, various lists (of pdf_xref_len length) are defined early on. If we trigger a repair during the clean, this can cause pdf_xref_len to increase causing an overrun. Fix this by watching for changes in the length, and checking accesses to the list for validity. This also appears to fix bugs 698700-698703.
2017-11-08Bug 698704: Fix for overflow check failing due to 'clever' compiler.Robin Watts
Adopt Josephs suggested fix for arithmetic overflow. Thanks to Kan-Ru Chen for spotting the problem.
2017-11-08Bug 698689: Don't create a hint stream for a file with 0 pages.Robin Watts
2017-11-06Expose text filtering through pdf_clean interface.Robin Watts
2017-11-06Use text state handling in pdf_filter_processor to filter text.Robin Watts
2017-11-06Extract text state handling from run pdf_processor.Robin Watts
So it can be used in the filter pdf_processor too.
2017-11-02Fixes for win32 build.Tor Andersson
2017-11-01Add separate fz_close_output step.Tor Andersson
Closing flushes output and may throw exceptions. Dropping frees the state and never throws exceptions.
2017-11-01Use int64_t for public file API offsets.Tor Andersson
Don't mess with conditional compilation with LARGEFILE -- always expose 64-bit file offsets in our public API.
2017-10-24Avoid security warning.Robin Watts
2017-10-24Improved overprint (simulation) control.Robin Watts
First, we add an fz_page_overprint function to detect if a page uses overprint. Only PDF implements this currently (other formats all return false). PDF looks for '/OP true' in any ExtGState entry. We make Mutool check this. If it finds it, and spot rendering is not completely disabled, then it ensures that the separation object passed to the pixmap into which we draw is non NULL. This causes the draw device to do overprint simulation. We ensure that mutool draw defaults to having the spot rendering mode default to simulation in builds that support it. Finally, we ensure that if an output intent is set by the document, and spot rendering is not completely disabled, then we ensure the seps object is non NULL so that we render to a group in the specified output intent, and THEN convert down to the required colorspace for the output. This should make us match acrobats behaviour.
2017-10-24Fix "CompatibleOverprint" blend mode.Robin Watts
This is a wierd one. After much panicing about this, it seems that all that is required to get the correct result is to ensure that the groups used by MuPDF to wrap graphical objects displayed in non-Normal blend modes is a non-isolated (non-knockout) one. The PDF spec is written assuming that blending happens at object plotting time. MuPDF does not work in this way. We only support normal blend mode plotting. To achieve non-normal blend modes, we therefore wrap each object in a group. The object is plotted 'normally', and then the end of the group causes the blend to be applied as required. Our plotters *do* know about overprinting, hence only the required components are changed. By using a non-isolated group, the background is copied in, and overprint correctly chooses not to alter the appropriate components. This means that when blending back, the background components match the source components for overprinted components. Thus (to put it in terms used in the PDF spec) cb = cs for all overprinted components. Hence if we use B(cb,cs) = cs (i.e. normal blend mode), we get what is required by CompatibleOverprint mode. Thus plotting into our group 'Normally, with overprint', and then blending back with the specified blend mode, appears to give exactly what we need.
2017-10-24Fix separation finding code.Robin Watts
2017-10-24Look for changes to Default colorspaces in XObjects.Robin Watts
2017-10-24Don't apply default decode array to ICC Lab image data.Robin Watts
Adjust the decode array to allow for the fact that the default decode is done by the ICC code.
2017-10-24Change colorspace 'device_n' field to be a flags word.Robin Watts
2017-10-24Logic for Sep and DeviceN colorspaces with C,M,Y, or K.Michael Vrhel
Special care is required when the DeviceN color space has cyan, magenta, yellow or black. For example, even if we support separations in the destination, if the color space has CMY or K as one of its colorants and we are drawing to an RGB or Gray pixmap we will want to do the tint transform. Also if the pixmap has no seps memember present, we support the separations if the destination is CMYK and the DeviceN colorspace has no "Spot" (non-CMYK) colorants.
2017-10-16Print warning when PDF version number is not a known version.Tor Andersson
2017-10-16Check for integer overflow when validating new style xref Index.Tor Andersson
2017-10-13Simple PCLm device.Robin Watts
Both bandwriter and document_writer interfaces cope with multi page docs. Update mudraw to output pclm format too. Incorporates fixes from Tor.
2017-10-12Don't cache page count in pdf_document.Tor Andersson
Make sure any changes to the page tree are always reflected immediately. The rev_page_map lookup cache exists when we load the outlines in order to resolve links faster, so we don't need to worry about that one. The linear_page_refs stuff is more troublesome, so don't mix editing a PDF with progressive loading!
2017-10-12Fix reference counting error in pdf_add_page.Tor Andersson
2017-10-12Some more consts.Tor Andersson
2017-10-05Remove unused code.Sebastian Rasmussen
2017-10-05Remove shadowed variables.Sebastian Rasmussen
2017-10-04Mark another variable fz_var(), avoiding optimization.Sebastian Rasmussen
This really should have been part of commit 0ef7cb983c4325156e08525381542ae3ada04720.
2017-10-02Drop stream upon error in inline stream.Sebastian Rasmussen
2017-10-02Make sure to drop chain upon error in raw and crypto filters.Sebastian Rasmussen
2017-09-25Bug 698592: Mark variable fz_var(), avoiding optimization.Sebastian Rasmussen
The change in 2707fa9e8e6d17d794330e719dec1b08161fb045 in build_filter_chain() allows for the variable chain to reside in a register, which means that the bug is likely to only be visible if built under optimization. First the chain variable is transferred to chain2, then set to NULL, then when an exception occurs in build_filter() the filter chain will be freed by build_filter(). Next the expectation is that execution proceeds to fz_catch() where fz_drop_stream() would be called with chain == NULL. However due to the chain variable residing in a register, its value is not NULL as expected, but was reset to its original value upon the exception (since they use setjmp()), hence fz_drop_stream() is called with a non-NULL value. Marking the chain variable with fz_var() prevents the compiler from allowing the chain variable to reside in a register and hence its value will remain NULL and never be reset.
2017-09-22Skip to next whitespace character instead of aborting when repairing PDF.Tor Andersson
2017-09-20gl: Scroll to link coordinates when following links.Tor Andersson
Also save link coordinates in outline nodes.
2017-09-13Consistently drop filter chain upon error.Sebastian Rasmussen
2017-09-13Remove old workaround.Sebastian Rasmussen
2017-09-13Do not lie.Sebastian Rasmussen
2017-09-12Fix leaks upon error while copying array/dict.Sebastian Rasmussen
2017-09-08Update fz_separations equivalent color mechanism.Robin Watts
Incorporates fixes from Michael. Rather than specifically giving it rgb and cmyk values, separations now include the colorspace. Conversions can then be done into ANY colorspace we need. Note, that we maintain the old way of working for the gproof device. Also, fix pdf_page_separations to correctly find all separations. This involves recursively looking through colorspaces, forms and shadings for colorspaces therein, making sure we don't run into any circular references. We do 2 passes, so that we can pick up as many colorants as Separations as possible. On the second pass we pick up any colorants we missed in terms of DeviceN spaces. The purpose of this is to try to ensure that we get as many tint transforms as single input functions as we can. This may not be important in the grand scheme of things, but seems neater.
2017-09-08Remove unnecessary fz_try()/fz_catch().Sebastian Rasmussen
2017-09-07Use dict_put_drop/array_push_drop wherever possible.Sebastian Rasmussen
2017-09-07Initialize variables to appease clang scan-build.Sebastian Rasmussen
2017-08-31Always add newline before 'endstream' keyword for PDF/A compliance.Philipp Knechtges
2017-08-31Adjust PDF header for PDF/A compliance.Philipp Knechtges
Remove superfluous '%' character in the comment with binary bytes.
2017-08-31Do not deflate metadata (necessary for PDF/A compliance).Philipp Knechtges
2017-08-17Fix 698357: Strip alpha and spot channels when saving PDF images.Tor Andersson
The logic for detecting and stripping alpha channels was subtly wrong. Simplify it, and also make it cope with spot colors.
2017-08-17Add FZ_REPLACEMENT_CHARACTER define for U+FFFD character.Tor Andersson
2017-08-16Bug 698168: Add support for writing indexed images to pdfs.Sebastian Rasmussen
2017-08-16Add bits per component parameter for flate and lzw compressed images.Sebastian Rasmussen
2017-08-16Add pdf filter parameters to DecodeParms when writing images.Sebastian Rasmussen
2017-08-15Avoid using unsupported alternate form printing of hex number.Sebastian Rasmussen