Add macros for handling over-/underflowing `FT_Int64' values.
* include/freetype/internal/ftcalc.h (ADD_INT64, SUB_INT64, MUL_INT64, DIV_INT64) [FT_LONG64]: New macros. * src/base/ftcalc.c (ft_corner_orientation) [FT_LONG64]: Use `SUB_INT64' and `MUL_INT64'. Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10028
This commit is contained in:
parent
c90cc6443b
commit
77f0814a31
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2018-08-23 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
Add macros for handling over-/underflowing `FT_Int64' values.
|
||||
|
||||
* include/freetype/internal/ftcalc.h (ADD_INT64, SUB_INT64,
|
||||
MUL_INT64, DIV_INT64) [FT_LONG64]: New macros.
|
||||
|
||||
* src/base/ftcalc.c (ft_corner_orientation) [FT_LONG64]: Use
|
||||
`SUB_INT64' and `MUL_INT64'.
|
||||
|
||||
Reported as
|
||||
|
||||
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10028
|
||||
|
||||
2018-08-22 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[truetype] Improve legibility of `glyf' parsing.
|
||||
|
@ -489,6 +489,19 @@ FT_BEGIN_HEADER
|
||||
#define NEG_INT32( a ) \
|
||||
(FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
|
||||
|
||||
#ifdef FT_LONG64
|
||||
|
||||
#define ADD_INT64( a, b ) \
|
||||
(FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) )
|
||||
#define SUB_INT64( a, b ) \
|
||||
(FT_Int64)( (FT_UInt64)(a) - (FT_UInt64)(b) )
|
||||
#define MUL_INT64( a, b ) \
|
||||
(FT_Int64)( (FT_UInt64)(a) * (FT_UInt64)(b) )
|
||||
#define NEG_INT64( a ) \
|
||||
(FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) )
|
||||
|
||||
#endif /* FT_LONG64 */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
@ -983,9 +983,13 @@
|
||||
FT_Pos out_x,
|
||||
FT_Pos out_y )
|
||||
{
|
||||
/* we silently ignore overflow errors since such large values */
|
||||
/* lead to even more (harmless) rendering errors later on */
|
||||
|
||||
#ifdef FT_LONG64
|
||||
|
||||
FT_Int64 delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
|
||||
FT_Int64 delta = SUB_INT64( MUL_INT64( in_x, out_y ),
|
||||
MUL_INT64( in_y, out_x ) );
|
||||
|
||||
|
||||
return ( delta > 0 ) - ( delta < 0 );
|
||||
@ -995,8 +999,6 @@
|
||||
FT_Int result;
|
||||
|
||||
|
||||
/* we silently ignore overflow errors, since such large values */
|
||||
/* lead to even more (harmless) rendering errors later on */
|
||||
if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L &&
|
||||
ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user