diff options
author | Werner Lemberg <wl@gnu.org> | 2016-03-23 07:31:59 +0100 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2016-03-23 07:31:59 +0100 |
commit | 31f2dc19462774dd4e5b55f80cafcee07077e744 (patch) | |
tree | d1c63ca337956bb6f9052fc7184041b5edbd0f38 | |
parent | e9181aba2c5594f5fedba649170c6e8efbabdea2 (diff) | |
download | freetype2-31f2dc19462774dd4e5b55f80cafcee07077e744.tar.gz |
[raster, smooth] Directly test outline size (#47500).
This improves stand-alone compilation.
* src/base/ftoutln.c (FT_Outline_Render): Move cbox size test to...
* src/raster/ftraster.c (ft_black_render), src/smooth/ftgrays.c
(gray_raster_render): ...these functions.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | src/base/ftoutln.c | 6 | ||||
-rw-r--r-- | src/raster/ftraster.c | 14 | ||||
-rw-r--r-- | src/smooth/ftgrays.c | 14 |
4 files changed, 39 insertions, 6 deletions
@@ -1,5 +1,16 @@ 2016-03-23 Werner Lemberg <wl@gnu.org> + [raster, smooth] Directly test outline size (#47500). + + This improves stand-alone compilation. + + * src/base/ftoutln.c (FT_Outline_Render): Move cbox size test to... + + * src/raster/ftraster.c (ft_black_render), src/smooth/ftgrays.c + (gray_raster_render): ...these functions. + +2016-03-23 Werner Lemberg <wl@gnu.org> + [raster, smooth] Fix some clang sanitizer runtime issues. * src/raster/ftraster.c (ft_black_reset, ft_black_set_mode, diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c index 1cf86442d..fa2d2cf65 100644 --- a/src/base/ftoutln.c +++ b/src/base/ftoutln.c @@ -618,7 +618,6 @@ FT_Error error; FT_Renderer renderer; FT_ListNode node; - FT_BBox cbox; if ( !library ) @@ -630,11 +629,6 @@ if ( !params ) return FT_THROW( Invalid_Argument ); - FT_Outline_Get_CBox( outline, &cbox ); - if ( cbox.xMin < -0x1000000L || cbox.yMin < -0x1000000L || - cbox.xMax > 0x1000000L || cbox.yMax > 0x1000000L ) - return FT_THROW( Invalid_Outline ); - renderer = library->cur_renderer; node = library->renderers.head; diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 297255350..01ed1c5d2 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -3175,6 +3175,20 @@ if ( !target_map->buffer ) return FT_THROW( Invalid ); + /* reject too large outline coordinates */ + { + FT_Vector* vec = outline->points; + FT_Vector* limit = vec + outline->n_points; + + + for ( ; vec < limit; vec++ ) + { + if ( vec->x < -0x1000000L || vec->x > 0x1000000L || + vec->y < -0x1000000L || vec->y > 0x1000000L ) + return FT_THROW( Invalid ); + } + } + ras.outline = *outline; ras.target = *target_map; diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c index 2d548dea7..9b008a0a7 100644 --- a/src/smooth/ftgrays.c +++ b/src/smooth/ftgrays.c @@ -2074,6 +2074,20 @@ typedef ptrdiff_t FT_PtrDist; if ( !( params->flags & FT_RASTER_FLAG_AA ) ) return FT_THROW( Invalid_Mode ); + /* reject too large outline coordinates */ + { + FT_Vector* vec = outline->points; + FT_Vector* limit = vec + outline->n_points; + + + for ( ; vec < limit; vec++ ) + { + if ( vec->x < -0x1000000L || vec->x > 0x1000000L || + vec->y < -0x1000000L || vec->y > 0x1000000L ) + return FT_THROW( Invalid_Outline ); + } + } + /* compute clipping box */ if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) ) { |