From 645b5eb857310819fc66d73c32751958439f5d12 Mon Sep 17 00:00:00 2001
From: Sebastian Rasmussen <sebras@gmail.com>
Date: Wed, 3 Oct 2018 13:54:57 +0800
Subject: Drop page upon exception while loading hinted page.

---
 source/pdf/pdf-xref.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
index 03df63d7..71b74b65 100644
--- a/source/pdf/pdf-xref.c
+++ b/source/pdf/pdf-xref.c
@@ -1840,24 +1840,29 @@ pdf_obj_read(fz_context *ctx, pdf_document *doc, int64_t *offset, int *nump, pdf
 static void
 pdf_load_hinted_page(fz_context *ctx, pdf_document *doc, int pagenum)
 {
+	pdf_obj *page = NULL;
+
 	if (!doc->hints_loaded || !doc->linear_page_refs)
 		return;
 
 	if (doc->linear_page_refs[pagenum])
 		return;
 
+	fz_var(page);
+
 	fz_try(ctx)
 	{
 		int num = doc->hint_page[pagenum].number;
-		pdf_obj *page = pdf_load_object(ctx, doc, num);
+		page = pdf_load_object(ctx, doc, num);
 		if (pdf_name_eq(ctx, PDF_NAME(Page), pdf_dict_get(ctx, page, PDF_NAME(Type))))
 		{
 			/* We have found the page object! */
 			DEBUGMESS((ctx, "LoadHintedPage pagenum=%d num=%d", pagenum, num));
 			doc->linear_page_refs[pagenum] = pdf_new_indirect(ctx, doc, num, 0);
 		}
-		pdf_drop_obj(ctx, page);
 	}
+	fz_always(ctx)
+		pdf_drop_obj(ctx, page);
 	fz_catch(ctx)
 	{
 		fz_rethrow_if(ctx, FZ_ERROR_TRYLATER);
-- 
cgit v1.2.3