diff options
author | Sebastian Rasmussen <sebras@hotmail.com> | 2009-08-24 00:10:19 +0200 |
---|---|---|
committer | Sebastian Rasmussen <sebras@hotmail.com> | 2009-08-24 00:10:19 +0200 |
commit | 07c6aebae7e1cb634170cbe04a995590990e3b41 (patch) | |
tree | 7cd50da60d92bc3dd03c699ea8e2d2bc61d57214 /mupdf/pdf_open.c | |
parent | c2c6b06cc5ada8c52a6a7624331eece5ac5fd568 (diff) | |
download | mupdf-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.c | 16 |
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: |