summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-annot.c
diff options
context:
space:
mode:
authorPaul Gardiner <paul.gardiner@artifex.com>2013-11-14 19:07:35 +0000
committerPaul Gardiner <paul.gardiner@artifex.com>2013-11-14 19:10:34 +0000
commit40b897cd22fb42f4496aa7b88e6301a0bf35f213 (patch)
treeb5ff497b817fd86fff6086305e2332fd0d976348 /source/pdf/pdf-annot.c
parent6afafa79e302e4d23b5c82182359619b59c64f6a (diff)
downloadmupdf-40b897cd22fb42f4496aa7b88e6301a0bf35f213.tar.xz
Fix slip with use of tail pointer for the annotations list
pdf_load_annots was leaving the tail pointer pointing at the automatic variable head in the case of the page having no annotations.
Diffstat (limited to 'source/pdf/pdf-annot.c')
-rw-r--r--source/pdf/pdf-annot.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c
index c0436885..8e4fd9b1 100644
--- a/source/pdf/pdf-annot.c
+++ b/source/pdf/pdf-annot.c
@@ -494,18 +494,16 @@ static const char *annot_type_str(fz_annot_type type)
void
pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
{
- pdf_annot *annot, *head, **itr;
+ pdf_annot *annot, **itr;
pdf_obj *obj, *ap, *as, *n, *rect;
int i, len, keep_annot;
fz_context *ctx = doc->ctx;
fz_var(annot);
fz_var(itr);
- fz_var(head);
fz_var(keep_annot);
- head = NULL;
- itr = &head;
+ itr = &page->annots;
len = pdf_array_len(annots);
/*
@@ -530,7 +528,8 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
}
fz_catch(ctx)
{
- pdf_free_annot(ctx, head);
+ pdf_free_annot(ctx, page->annots);
+ page->annots = NULL;
fz_rethrow(ctx);
}
@@ -538,7 +537,7 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
Iterate through the newly created annot linked list, using a double pointer to
facilitate deleting broken annotations.
*/
- itr = &head;
+ itr = &page->annots;
while (*itr)
{
annot = *itr;
@@ -602,7 +601,8 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
{
if (fz_caught(ctx) == FZ_ERROR_TRYLATER)
{
- pdf_free_annot(ctx, head);
+ pdf_free_annot(ctx, page->annots);
+ page->annots = NULL;
fz_rethrow(ctx);
}
keep_annot = 0;
@@ -617,7 +617,6 @@ pdf_load_annots(pdf_document *doc, pdf_page *page, pdf_obj *annots)
}
}
- page->annots = head;
page->annot_tailp = itr;
}