summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdf/pdf_xref.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/pdf/pdf_xref.c b/pdf/pdf_xref.c
index 7914876e..ac89109d 100644
--- a/pdf/pdf_xref.c
+++ b/pdf/pdf_xref.c
@@ -123,7 +123,17 @@ pdf_read_new_trailer(pdf_document *xref, pdf_lexbuf *buf)
{
fz_try(xref->ctx)
{
- xref->trailer = pdf_parse_ind_obj(xref, xref->file, buf, NULL, NULL, NULL);
+ int num, gen, stm_ofs, ofs;
+ ofs = fz_tell(xref->file);
+ xref->trailer = pdf_parse_ind_obj(xref, xref->file, buf, &num, &gen, &stm_ofs);
+ if (num > xref->len)
+ pdf_resize_xref(xref, num+1);
+ xref->table[num].ofs = ofs;
+ xref->table[num].gen = gen;
+ xref->table[num].stm_ofs = stm_ofs;
+ pdf_drop_obj(xref->table[num].obj);
+ xref->table[num].obj = pdf_keep_obj(xref->trailer);
+ xref->table[num].type = 'n';
}
fz_catch(xref->ctx)
{
@@ -322,7 +332,16 @@ pdf_read_new_xref(pdf_document *xref, pdf_lexbuf *buf)
fz_try(ctx)
{
+ int ofs = fz_tell(xref->file);
trailer = pdf_parse_ind_obj(xref, xref->file, buf, &num, &gen, &stm_ofs);
+ if (num > xref->len)
+ pdf_resize_xref(xref, num+1);
+ xref->table[num].ofs = ofs;
+ xref->table[num].gen = gen;
+ xref->table[num].stm_ofs = stm_ofs;
+ pdf_drop_obj(xref->table[num].obj);
+ xref->table[num].obj = pdf_keep_obj(trailer);
+ xref->table[num].type = 'n';
}
fz_catch(ctx)
{