From 3212852ccea98e0e8eb7188e8b5cb07f26f64fce Mon Sep 17 00:00:00 2001 From: Alexei Podtelezhnikov Date: Wed, 3 Sep 2014 21:57:42 -0400 Subject: [PATCH] [base] Tighten the overflow check in `FT_MulFix'. * src/base/ftcalc.c (FT_MulFix) [!FT_LONG64]: Updated. --- ChangeLog | 6 ++++++ src/base/ftcalc.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62ec7ae4d..dc8d79b6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-09-03 Alexei Podtelezhnikov + + [base] Tighten the overflow check in `FT_MulFix'. + + * src/base/ftcalc.c (FT_MulFix) [!FT_LONG64]: Updated. + 2014-09-02 Alexei Podtelezhnikov [truetype] Shortcut ppem calculations for square pixels. diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c index a12007189..671eec874 100644 --- a/src/base/ftcalc.c +++ b/src/base/ftcalc.c @@ -394,7 +394,8 @@ /* */ /* a + (b >> 8) <= (131071 >> 4) */ /* */ - /* should work well to avoid the overflow. */ + /* covers the practical range of use. The actual test below is a bit */ + /* tighter to avoid the border case overflows. */ /* */ /* documentation is in freetype.h */ @@ -524,7 +525,7 @@ ua = (FT_ULong)a; ub = (FT_ULong)b; - if ( ua + ( ub >> 8 ) <= 8191UL ) + if ( ua + ( ub >> 8 ) <= 8190UL ) ua = ( ua * ub + 0x8000U ) >> 16; else { @@ -555,7 +556,7 @@ ua = (FT_ULong)a; ub = (FT_ULong)b; - if ( ua + ( ub >> 8 ) <= 8191UL ) + if ( ua + ( ub >> 8 ) <= 8190UL ) ua = ( ua * ub + 0x8000UL ) >> 16; else {