summaryrefslogtreecommitdiff
path: root/mupdf/pdf_open.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@hotmail.com>2009-08-24 00:10:19 +0200
committerSebastian Rasmussen <sebras@hotmail.com>2009-08-24 00:10:19 +0200
commit07c6aebae7e1cb634170cbe04a995590990e3b41 (patch)
tree7cd50da60d92bc3dd03c699ea8e2d2bc61d57214 /mupdf/pdf_open.c
parentc2c6b06cc5ada8c52a6a7624331eece5ac5fd568 (diff)
downloadmupdf-07c6aebae7e1cb634170cbe04a995590990e3b41.tar.xz
Handle pdfs where freed objects have not been properly marked as free in xref.
Diffstat (limited to 'mupdf/pdf_open.c')
-rw-r--r--mupdf/pdf_open.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/mupdf/pdf_open.c b/mupdf/pdf_open.c
index b0eaa3f5..5c4f6912 100644
--- a/mupdf/pdf_open.c
+++ b/mupdf/pdf_open.c
@@ -721,6 +721,22 @@ pdf_loadxref(pdf_xref *xref, char *filename)
goto cleanup;
}
+ /* broken pdfs where first object is not free */
+ if (xref->table[0].type != 'f')
+ {
+ fz_warn("first object in xref is not free");
+ xref->table[0].type = 'f';
+ }
+
+ /* broken pdfs where freed objects have offset and gen set to 0
+ but still exits */
+ for (i = 0; i < xref->len; i++)
+ if (xref->table[i].type == 'n' && xref->table[i].ofs == 0)
+ {
+ fz_warn("object (%d %d R) has invalid offset, assumed missing", i, xref->table[i].gen);
+ xref->table[i].type = 'f';
+ }
+
return fz_okay;
cleanup: