diff options
-rw-r--r-- | source/pdf/pdf-page.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c index 73e1a9b7..9f802927 100644 --- a/source/pdf/pdf-page.c +++ b/source/pdf/pdf-page.c @@ -100,16 +100,21 @@ pdf_lookup_page_obj(pdf_document *doc, int needle) static int pdf_count_pages_before_kid(pdf_document *doc, pdf_obj *parent, int kid_num) { - pdf_obj *count, *kid, *kids = pdf_dict_gets(parent, "Kids"); + pdf_obj *kids = pdf_dict_gets(parent, "Kids"); int i, total = 0, len = pdf_array_len(kids); for (i = 0; i < len; i++) { - kid = pdf_array_get(kids, i); + pdf_obj *kid = pdf_array_get(kids, i); if (pdf_to_num(kid) == kid_num) return total; - count = pdf_dict_gets(kid, "Count"); - if (count) - total += pdf_to_int(count); + if (!strcmp(pdf_to_name(pdf_dict_gets(kid, "Type")), "Pages")) + { + pdf_obj *count = pdf_dict_gets(kid, "Count"); + int n = pdf_to_int(count); + if (count == NULL || n <= 0) + fz_throw(doc->ctx, FZ_ERROR_GENERIC, "illegal or missing count in pages tree"); + total += n; + } else total++; } |