[base] Integer overflow.

Reported as

  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2573

* src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Use
FT_PIX_CEIL_LONG and FT_PIX_ROUND_LONG.
This commit is contained in:
Werner Lemberg 2017-07-12 22:16:37 +02:00
parent b5cab5c9ca
commit 134de096e0
2 changed files with 21 additions and 10 deletions

View File

@ -1,3 +1,14 @@
2017-07-12 Werner Lemberg <wl@gnu.org>
[base] Integer overflow.
Reported as
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2573
* src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Use
FT_PIX_CEIL_LONG and FT_PIX_ROUND_LONG.
2017-07-12 Werner Lemberg <wl@gnu.org> 2017-07-12 Werner Lemberg <wl@gnu.org>
* src/truetype/ttpload.c (tt_face_get_location): Off-by-one typo. * src/truetype/ttpload.c (tt_face_get_location): Off-by-one typo.

View File

@ -579,12 +579,12 @@
if ( vertical ) if ( vertical )
{ {
metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX ); metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY ); metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY );
right = FT_PIX_CEIL( ADD_LONG( metrics->vertBearingX, right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingX,
metrics->width ) ); metrics->width ) );
bottom = FT_PIX_CEIL( ADD_LONG( metrics->vertBearingY, bottom = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingY,
metrics->height ) ); metrics->height ) );
metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX ); metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY ); metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
@ -599,13 +599,13 @@
metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX ); metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY ); metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
right = FT_PIX_CEIL ( ADD_LONG( metrics->horiBearingX, right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->horiBearingX,
metrics->width ) ); metrics->width ) );
bottom = FT_PIX_FLOOR( SUB_LONG( metrics->horiBearingY, bottom = FT_PIX_FLOOR( SUB_LONG( metrics->horiBearingY,
metrics->height ) ); metrics->height ) );
metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX ); metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY ); metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY );
metrics->width = SUB_LONG( right, metrics->width = SUB_LONG( right,
metrics->horiBearingX ); metrics->horiBearingX );
@ -613,8 +613,8 @@
bottom ); bottom );
} }
metrics->horiAdvance = FT_PIX_ROUND( metrics->horiAdvance ); metrics->horiAdvance = FT_PIX_ROUND_LONG( metrics->horiAdvance );
metrics->vertAdvance = FT_PIX_ROUND( metrics->vertAdvance ); metrics->vertAdvance = FT_PIX_ROUND_LONG( metrics->vertAdvance );
} }
#endif /* GRID_FIT_METRICS */ #endif /* GRID_FIT_METRICS */