summaryrefslogtreecommitdiff
path: root/fitz
AgeCommit message (Collapse)Author
2012-01-07Fix compilation warningsSebastian Rasmussen
Add missing newline and remove excessive arguments.
2012-01-06Android tweaks.Robin Watts
Include android headers in fitz.h so we can debug. Arrange for error throwing to output to android error stream as well as stderr. Change jpeg library to not use backing store. Solves bug 692473.
2012-01-06Various fixes to avoid arithmetic problems.Robin Watts
Various fixes to avoid overflow problems, division by zeros, use of uninitialised variables etc. All from/suggested by Zenikos patch.
2012-01-06Catch errors with impossibly wide images.Robin Watts
Thanks to Zeniko for pointing this out.
2012-01-06Various memory leak fixes.Robin Watts
In error cases, ensure we free objects correctly. Thanks to Zeniko for finding the problems (and many of the solutions!)
2012-01-06Add 'marking' functions for dictionaries.Robin Watts
In various places in the code, we add markers (".seen") to dictionaries as we traverse them to ensure that we don't go into infinite loops. Adding a dictionary entry is bad as it's a) an expensive operation, b) a potentially destructive one, and c) produces another possible point of failure (as mallocs can fail). Instead, add a flag to each dict to allow them to be marked/unmarked and use that instead. Thanks to Zeniko for pointing out various places that could usefully be protected against infinite recursion.
2012-01-06fz_free_link_dest; fix a memory leakRobin Watts
Externalise free_link_dest, use it in doc_outline.c to avoid a memory leak. Thanks to again to Zeniko for pointing this out.
2012-01-04Bug 692739: Add ability to abort time consuming actionsRobin Watts
A new 'cookie' parameter is added to page rendering/interpretation functions. Supply this as NULL to get existing behaviour. If you supply a non-NULL cookie, then this is taken as a pointer to a struct that can be used for simple, non-thread locked communication between caller and library. The entire struct should be memset to zero before entry, except for specific flags (thus coping with future extensions to this struct). The abort flag should be zero on entry. It will be checked periodically by the library - if the caller sets it non-zero (via another thread) then the current operation will be aborted. No guarantees are given as to how often this will be checked, or how fast it will be responded to. The progress_max field will be set to an integer (-1 for unknown) representing the number of 'things' to do. The progress field will count up from 0 to this number as time goes by. No guarantees are made as to the accuracy of this information, but it should be useful for offering some sort of progress bar etc. Note that progress_max may increase during the job. In general, callers should be careful to accept out of range or invalid data in this structure as this is deliberately accessed 'unlocked'.
2012-01-02Bound shades by the supplied bbox.Robin Watts
Fix a 'TODO'. When asking for the bounds of a shading, simply convert the shadings bbox and intersect with that.
2011-12-28Outline/link destination tweaks.Robin Watts
Move 'kind' into the fz_link_dest structure (as this makes more sense). Put an fz_link_dest rather than just a page number into the outlines structure. Correct parsing of actions and dests from pdf outlines.
2011-12-24Don't forget to copy the link destination struct when creating a link.Tor Andersson
2011-12-23Generalise pdf_links to be fz_links.Robin Watts
Move to a non-pdf specific type for links. PDF specific parsing is done in pdf_annots.c as before, but the essential type (and handling functions for that type) are in a new file fitz/base_link.c. The new type is more expressive than before; specifically all the possible PDF modes are expressable in it. Hopefully this should allow XPS links to be represented too.
2011-12-22More MemSqueezing fixes.Robin Watts
2011-12-21Fix whitespace.Tor Andersson
2011-12-20More memsqueezing fixes.Robin Watts
One of the previous memsqueezing fixes (specifically that in close_dctd) appears to cause the Memento fork bases squeezing process to stop. This appears to be because old code would do a NULL dereference causing a SEGV. This would somehow NOT be picked up by the signal handler, and the child would exit. If the code is fixed to avoid the SEGV the code then somehow goes on to do something (not in the close_dctd code) that makes the mem squeeze process grind to a halt - but NOT in the same instance of the executable. I am at a loss to explain this, but would rather the code stays as it is (being as far as I can see correct) for now.
2011-12-19More memsqueezing fixes.Robin Watts
2011-12-19Add Memento 'pattern' code.Robin Watts
Disabled for now by default. Better SEGV handling under windows (to facilitate scripted squeezing)
2011-12-19More Memory squeezing fixesRobin Watts
2011-12-17More Memory Squeezing fixes.Robin Watts
2011-12-17More memsqueezing fixes; stream creation.Robin Watts
2011-12-17Change stream 'close' functions to facilitate error cleanup.Robin Watts
Rather than passing a stream to a close function, just pass context and state - that's all that is required. This enables us to call close to cleanup neatly if the stream fails to allocate.
2011-12-16More memsqueezing fixes.Robin Watts
2011-12-16Increase amount to search in blocks for nestings in memento.Robin Watts
Mupdf has some large structures (fz_shade is over 32K!), so to catch all pointers we need to search further than the 1K I was originally limiting ourselves to.
2011-12-16Fix another Memento_label warning.Robin Watts
Missed this one last time.
2011-12-16More memsqueezing fixes.Robin Watts
2011-12-16Fix Memento_label related warnings in non-memento builds.Robin Watts
2011-12-16Mote memsqueezing fixes.Robin Watts
2011-12-16Add fz_malloc_struct, and make code use it.Robin Watts
The new fz_malloc_struct(A,B) macro allocates sizeof(B) bytes using fz_malloc, and then passes the resultant pointer to Memento_label to label it with "B". This costs nothing in non-memento builds, but gives much nicer listings of leaked blocks when memento is enabled.
2011-12-16New Memento features; nesting of listed blocks, labelling of blocksRobin Watts
When listing blocks from Memento, look for internal pointers to other blocks, and use this to generate a nested list - much easier to read when looking to see which stray reference is causing blocks to leak. Add new Memento_label feature to allow blocks to be labelled. Makes block displaying much easier to read.
2011-12-16More memsqueezing fixesRobin Watts
2011-12-15More Memsqueezing fixes.Robin Watts
2011-12-15Memento tweak.Robin Watts
Slight memento tweak to simplify code (and correct problem with repeated event numbers when squeezing).
2011-12-15Various Memsqueezing fixes.Robin Watts
Fixes for leaks (and SEGVs, division by zeros etc) seen when Memsqueezing.
2011-12-15Fix warnings/errors on unix builds.Robin Watts
Fix warnings/errors thrown up by the last few commits (which were only tested on windows).
2011-12-15Add scavenging functionality.Robin Watts
When fz_malloc (etc) are about to fail, we try to scavenge memory from the store and then retry. We repeatedly try to bin objects from the store until the malloc succeeds, or until we have nothing else to bin. This means we no longer need the 'aging' of the store, so this is removed.
2011-12-15Add MEMENTO_MAXMEMORY (and Memento_setMax).Robin Watts
New Memento feature that enables us to easily test scavenging.
2011-12-15Bring Memento up to date with changes in gs.Robin Watts
Memento_listBlocks and Memento_listNewBlocks.
2011-12-15Remove stray whitespace.Tor Andersson
2011-12-15Remove 'soft limit' on pixmaps in favour of fz_store.Robin Watts
Change the fz_store to be limited to 256 Megs. Remove the soft limit for pixmaps; the store will automatically throw old resources away to stay below the limit.
2011-12-15Rework pdf_store to fz_store, a part of fz_context.Robin Watts
Firstly, we rename pdf_store to fz_store, reflecting the fact that there are no pdf specific dependencies on it. Next, we rework it so that all the objects that can be stored in the store start with an fz_storable structure. This consists of a reference count, and a function used to free the object when the reference count reaches zero. All the keep/drop functions are then reimplemented by calling fz_keep_sharable/fz_drop_sharable. The 'drop' functions as supplied by the callers are thus now 'free' functions, only called if the reference count drops to 0. The store changes to keep all the items in the store in the linked list (which becomes a doubly linked one). We still make use of the hashtable to index into this list quickly, but we now have the objects in an LRU ordering within the list. Every object is put into the store, with a size record; this is an estimate of how much memory would be freed by freeing that object. The store is moved into the context and given a maximum size; when new things are inserted into the store, care is taken to ensure that we do not expand beyond this size. We evict any stored items (that are not in use) starting from the least recently used. Finding an object in the store now takes a reference to it already. LOCK and UNLOCK comments are used to indicate where locks need to be taken and released to ensure thread safety.
2011-12-08Stylistic changes when testing pointer values for NULL.Tor Andersson
Also: use 'cannot' instead of 'failed to' in error messages.
2011-12-08Remove deprecated error handling code.Tor Andersson
2011-12-08Throw exceptions for read errors.Tor Andersson
2011-12-08Fix exception handling in pdfdraw to avoid leaks.Robin Watts
Remove use of 'die', in place of proper exception handling.
2011-12-08Move from volatile to fz_var.Robin Watts
When using exceptions (which are implemented using setjmp/longjmp), we need to be careful to ensure that variable values get written back before any exception happens. Previously we've done that using volatile, but that produces nasty warnings (and unduly limits the compilers freedom to optimise). Here we introduce a new macro fz_var that passes the address of the variable out of scope. This means that the compiler has to ensure that any changes to its value are written back to memory before calling any out of scope function.
2011-12-08Fix SEGV with "1439 - color softmask fails to draw jpx image.pdf"Robin Watts
Another missed fz_rethrow. Also, ensure that fz_drop_buffer copes with NULL input.
2011-12-08Merge branch 'master' into contextRobin Watts
2011-12-08Round instead of truncate when converting reals to ints in fz_to_int.Tor Andersson
2011-12-08Undo pre-multiplied alpha when saving PNG with alpha channels.Tor Andersson
2011-12-07Fix fz_close to cope with NULL.Robin Watts
Destructors should accept NULL. This was being tripped in the cleanup code if a file did not exist.