From 07c6aebae7e1cb634170cbe04a995590990e3b41 Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Mon, 24 Aug 2009 00:10:19 +0200 Subject: Handle pdfs where freed objects have not been properly marked as free in xref. --- mupdf/pdf_open.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'mupdf/pdf_open.c') 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: -- cgit v1.2.3