From b6fa8451461b51cc793a4cd0ab17350e3e6ae9fe Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 21 Dec 2008 09:46:31 +0000 Subject: [PATCH] * src/autofit/aflatin.c (af_latin_hint_edges), src/autofit/aflatin2.c (af_latin2_hint_edges), src/autofit/afcjk.c (af_cjk_hint_edges): Protect against division by zero. --- ChangeLog | 6 ++++++ src/autofit/afcjk.c | 13 +++++++++---- src/autofit/aflatin.c | 5 ++++- src/autofit/aflatin2.c | 5 ++++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b6515b2aa..233623223 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-12-21 Hongbo Ni + + * src/autofit/aflatin.c (af_latin_hint_edges), + src/autofit/aflatin2.c (af_latin2_hint_edges), src/autofit/afcjk.c + (af_cjk_hint_edges): Protect against division by zero. + 2008-12-18 Werner Lemberg * docs/CHANGES: Updated. diff --git a/src/autofit/afcjk.c b/src/autofit/afcjk.c index 7f77f7b17..de3ce11d5 100644 --- a/src/autofit/afcjk.c +++ b/src/autofit/afcjk.c @@ -1253,10 +1253,15 @@ else if ( after >= edge_limit ) af_cjk_align_serif_edge( hints, before, edge ); else - edge->pos = before->pos + - FT_MulDiv( edge->fpos - before->fpos, - after->pos - before->pos, - after->fpos - before->fpos ); + { + if ( after->fpos == before->fpos ) + edge->pos = before->pos; + else + edge->pos = before->pos + + FT_MulDiv( edge->fpos - before->fpos, + after->pos - before->pos, + after->fpos - before->fpos ); + } } } } diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c index 09f9a98fa..ba59e5b38 100644 --- a/src/autofit/aflatin.c +++ b/src/autofit/aflatin.c @@ -2008,7 +2008,10 @@ if ( before >= edges && before < edge && after < edge_limit && after > edge ) { - edge->pos = before->pos + + if ( after->opos == before->opos ) + edge->pos = before->pos; + else + edge->pos = before->pos + FT_MulDiv( edge->opos - before->opos, after->pos - before->pos, after->opos - before->opos ); diff --git a/src/autofit/aflatin2.c b/src/autofit/aflatin2.c index 784ccb018..14327b172 100644 --- a/src/autofit/aflatin2.c +++ b/src/autofit/aflatin2.c @@ -2153,7 +2153,10 @@ if ( before >= edges && before < edge && after < edge_limit && after > edge ) { - edge->pos = before->pos + + if ( after->opos == before->opos ) + edge->pos = before->pos; + else + edge->pos = before->pos + FT_MulDiv( edge->opos - before->opos, after->pos - before->pos, after->opos - before->opos );