summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-outline.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/pdf/pdf-outline.c')
-rw-r--r--source/pdf/pdf-outline.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/source/pdf/pdf-outline.c b/source/pdf/pdf-outline.c
index c31a1954..7c8cfdaa 100644
--- a/source/pdf/pdf-outline.c
+++ b/source/pdf/pdf-outline.c
@@ -69,12 +69,21 @@ fz_outline *
pdf_load_outline(fz_context *ctx, pdf_document *doc)
{
pdf_obj *root, *obj, *first;
+ fz_outline *outline = NULL;
- root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root);
- obj = pdf_dict_get(ctx, root, PDF_NAME_Outlines);
- first = pdf_dict_get(ctx, obj, PDF_NAME_First);
- if (first)
- return pdf_load_outline_imp(ctx, doc, first);
+ pdf_load_page_tree(ctx, doc); /* cache page tree for fast link destination lookups */
+ fz_try(ctx)
+ {
+ root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root);
+ obj = pdf_dict_get(ctx, root, PDF_NAME_Outlines);
+ first = pdf_dict_get(ctx, obj, PDF_NAME_First);
+ if (first)
+ outline = pdf_load_outline_imp(ctx, doc, first);
+ }
+ fz_always(ctx)
+ pdf_drop_page_tree(ctx, doc);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
- return NULL;
+ return outline;
}