From ec4ff85474207824c79e202c35c077d489811f69 Mon Sep 17 00:00:00 2001 From: malc Date: Sun, 24 Oct 2010 07:29:08 +0400 Subject: [PATCH] Fix handling of links where destination is not an array --- link.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/link.c b/link.c index 821db13..8ffdf92 100644 --- a/link.c +++ b/link.c @@ -1351,28 +1351,33 @@ CAMLprim value ml_whatsunder (value ptr_v, value x_v, value y_v) fz_obj *obj; pageno = -1; - obj = fz_arrayget (link->dest, 0); - if (fz_isindirect (obj)) { - pageno = pdf_findpageobject (state.xref, obj) - 1; - } - else if (fz_isint (obj)) { - pageno = fz_toint (obj); - } + p.x = 0; + p.y = 0; - p.x = 0.0; - p.y = 0.0; - if (fz_arraylen (link->dest) > 3) { - fz_obj *xo, *yo; - - xo = fz_arrayget (link->dest, 2); - yo = fz_arrayget (link->dest, 3); - if (!fz_isnull (xo) && !fz_isnull (yo)) { - p.x = fz_toint (xo); - p.y = fz_toint (yo); - p = fz_transformpoint (page->pagedim.ctm, p); + if (fz_isarray (link->dest)) { + obj = fz_arrayget (link->dest, 0); + if (fz_isindirect (obj)) { + pageno = pdf_findpageobject (state.xref, obj) - 1; } - } + else if (fz_isint (obj)) { + pageno = fz_toint (obj); + } + + if (fz_arraylen (link->dest) > 3) { + fz_obj *xo, *yo; + xo = fz_arrayget (link->dest, 2); + yo = fz_arrayget (link->dest, 3); + if (!fz_isnull (xo) && !fz_isnull (yo)) { + p.x = fz_toint (xo); + p.y = fz_toint (yo); + p = fz_transformpoint (page->pagedim.ctm, p); + } + } + } + else { + pageno = pdf_findpageobject (state.xref, link->dest) - 1; + } tup_v = caml_alloc_tuple (2); ret_v = caml_alloc_small (1, 1); Field (tup_v, 0) = Val_int (pageno); -- 2.11.4.GIT