From 5dc30451b80f6bb0079424a130875c10486e4d34 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 7 Aug 2017 21:37:07 -0700 Subject: [PATCH] Two fixes to avar mapping 1. Handle segment with two entries correctly, 2. Fix rounding math. Ouch! Fixes https://github.com/behdad/harfbuzz/issues/521 --- src/hb-ot-var-avar-table.hh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/hb-ot-var-avar-table.hh b/src/hb-ot-var-avar-table.hh index ace0f5f2..464cf35b 100644 --- a/src/hb-ot-var-avar-table.hh +++ b/src/hb-ot-var-avar-table.hh @@ -57,8 +57,13 @@ struct SegmentMaps : ArrayOf * that at least -1, 0, and +1 must be mapped. But we include these as * part of a better error recovery scheme. */ - if (!len) - return value; + if (len < 2) + { + if (!len) + return value; + else /* len == 1*/ + return value - array[0].fromCoord + array[0].toCoord; + } if (value <= array[0].fromCoord) return value - array[0].fromCoord + array[0].toCoord; @@ -76,8 +81,8 @@ struct SegmentMaps : ArrayOf int denom = array[i].fromCoord - array[i-1].fromCoord; return array[i-1].toCoord + - (array[i].toCoord - array[i-1].toCoord) * - (value - array[i-1].fromCoord + denom/2) / denom; + ((array[i].toCoord - array[i-1].toCoord) * + (value - array[i-1].fromCoord) + denom/2) / denom; } DEFINE_SIZE_ARRAY (2, array); -- GitLab