From 6ca29dc856976b577fd982804914e01df65467a7 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 14 Apr 2011 20:47:36 +0200 Subject: pdf_cmap.c: Fix off-by-one error and check for integer overflow. --- pdf/pdf_cmap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'pdf/pdf_cmap.c') diff --git a/pdf/pdf_cmap.c b/pdf/pdf_cmap.c index 2715b5dd..2c5048ae 100644 --- a/pdf/pdf_cmap.c +++ b/pdf/pdf_cmap.c @@ -333,14 +333,14 @@ pdf_sort_cmap(pdf_cmap *cmap) if (pdf_range_high(a) - a->low + a->offset + 1 == b->offset) { /* SR -> R and SS -> R and RR -> R and RS -> R */ - if (pdf_range_flags(a) == PDF_CMAP_SINGLE || pdf_range_flags(a) == PDF_CMAP_RANGE) + if ((pdf_range_flags(a) == PDF_CMAP_SINGLE || pdf_range_flags(a) == PDF_CMAP_RANGE) && (pdf_range_high(b) - a->low <= 0x3fff)) { pdf_range_set_flags(a, PDF_CMAP_RANGE); pdf_range_set_high(a, pdf_range_high(b)); } /* LS -> L */ - else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_SINGLE) + else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_SINGLE && (pdf_range_high(b) - a->low <= 0x3fff)) { pdf_range_set_high(a, pdf_range_high(b)); add_table(cmap, b->offset); @@ -373,7 +373,7 @@ pdf_sort_cmap(pdf_cmap *cmap) } /* LS -> L */ - else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_SINGLE) + else if (pdf_range_flags(a) == PDF_CMAP_TABLE && pdf_range_flags(b) == PDF_CMAP_SINGLE && (pdf_range_high(b) - a->low <= 0x3fff)) { pdf_range_set_high(a, pdf_range_high(b)); add_table(cmap, b->offset); @@ -396,7 +396,7 @@ pdf_sort_cmap(pdf_cmap *cmap) b ++; } - cmap->rlen = a - cmap->ranges; + cmap->rlen = a - cmap->ranges + 1; fz_flush_warnings(); } -- cgit v1.2.3