From 9ef942a0713f837c872a8ab28275bba1000792d3 Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Thu, 30 Dec 2010 01:13:58 +0000 Subject: Repair xref before repairing the trailer. --- mupdf/pdf_repair.c | 53 ++++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/mupdf/pdf_repair.c b/mupdf/pdf_repair.c index a3f2653c..48472314 100644 --- a/mupdf/pdf_repair.c +++ b/mupdf/pdf_repair.c @@ -281,34 +281,10 @@ pdf_repairxref(pdf_xref *xref, char *buf, int bufsize) break; } - /* create a repaired trailer, Root will be added later */ - - xref->trailer = fz_newdict(4); - - obj = fz_newint(maxnum + 1); - fz_dictputs(xref->trailer, "Size", obj); - fz_dropobj(obj); - - if (encrypt) - { - fz_dictputs(xref->trailer, "Encrypt", encrypt); - fz_dropobj(encrypt); - } - - if (id) - { - fz_dictputs(xref->trailer, "ID", id); - fz_dropobj(id); - } + /* make xref reasonable */ pdf_resizexref(xref, maxnum + 1); - xref->table[0].type = 'f'; - xref->table[0].ofs = 0; - xref->table[0].gen = 65535; - xref->table[0].stmofs = 0; - xref->table[0].obj = nil; - for (i = 0; i < listlen; i++) { xref->table[list[i].num].type = 'n'; @@ -339,6 +315,12 @@ pdf_repairxref(pdf_xref *xref, char *buf, int bufsize) } + xref->table[0].type = 'f'; + xref->table[0].ofs = 0; + xref->table[0].gen = 65535; + xref->table[0].stmofs = 0; + xref->table[0].obj = nil; + next = 0; for (i = xref->len - 1; i >= 0; i--) { @@ -351,6 +333,27 @@ pdf_repairxref(pdf_xref *xref, char *buf, int bufsize) } } + /* create a repaired trailer, Root will be added later */ + + xref->trailer = fz_newdict(4); + + obj = fz_newint(maxnum + 1); + fz_dictputs(xref->trailer, "Size", obj); + fz_dropobj(obj); + + if (encrypt) + { + fz_dictputs(xref->trailer, "Encrypt", encrypt); + fz_dropobj(encrypt); + } + + if (id) + { + fz_dictputs(xref->trailer, "ID", id); + fz_dropobj(id); + } + + fz_free(list); return fz_okay; -- cgit v1.2.3