diff options
author | Werner Lemberg <wl@gnu.org> | 2019-12-13 23:56:25 +0100 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2019-12-13 23:56:25 +0100 |
commit | 2c9a2d58ca9c8e58cae1d0b63f17e291297484eb (patch) | |
tree | b87b38719ed4064d29bfe30678788e152a0a5e29 /src | |
parent | 11d4ce23ac55a7d881bba5214c47922c05127242 (diff) | |
download | freetype2-2c9a2d58ca9c8e58cae1d0b63f17e291297484eb.tar.gz |
Another bunch of UBSan warnings on adding offsets to nullptr.
Reported as
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19427
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19433
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19441
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19451
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19452
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=19457
* src/autofit/aflatin.c (af_latin_hints_compute_segments,
af_latin_hints_compute_edges): Use `FT_OFFSET'.
* src/base/ftstream.c (FT_Stream_EnterFrame): Use `FT_OFFSET'.
* src/psaux/cffdecode.c (cff_decoder_parse_charstrings): Exit early
if there is no charstring.
* src/psaux/psobjs.c (t1_decrypt): Use `FT_OFFSET'.
* src/smooth/ftsmooth.c (ft_smooth_render_generic): Exit early for
zero bitmap dimensions.
Diffstat (limited to 'src')
-rw-r--r-- | src/autofit/aflatin.c | 4 | ||||
-rw-r--r-- | src/base/ftstream.c | 2 | ||||
-rw-r--r-- | src/psaux/cffdecode.c | 3 | ||||
-rw-r--r-- | src/psaux/psobjs.c | 2 | ||||
-rw-r--r-- | src/smooth/ftsmooth.c | 3 |
5 files changed, 10 insertions, 4 deletions
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c index 27d402488..444600c23 100644 --- a/src/autofit/aflatin.c +++ b/src/autofit/aflatin.c @@ -1910,7 +1910,7 @@ /* sense -- this is used to better detect and ignore serifs */ { AF_Segment segments = axis->segments; - AF_Segment segments_end = segments + axis->num_segments; + AF_Segment segments_end = FT_OFFSET( segments, axis->num_segments ); for ( segment = segments; segment < segments_end; segment++ ) @@ -2314,7 +2314,7 @@ */ { AF_Edge edges = axis->edges; - AF_Edge edge_limit = edges + axis->num_edges; + AF_Edge edge_limit = FT_OFFSET( edges, axis->num_edges ); AF_Edge edge; diff --git a/src/base/ftstream.c b/src/base/ftstream.c index 4b0890d7f..b53777c34 100644 --- a/src/base/ftstream.c +++ b/src/base/ftstream.c @@ -286,7 +286,7 @@ } stream->cursor = stream->base; - stream->limit = stream->cursor + count; + stream->limit = FT_OFFSET( stream->cursor, count ); stream->pos += read_bytes; } else diff --git a/src/psaux/cffdecode.c b/src/psaux/cffdecode.c index 06c6af455..78a04be01 100644 --- a/src/psaux/cffdecode.c +++ b/src/psaux/cffdecode.c @@ -530,6 +530,9 @@ builder->path_begun = 0; + if ( !charstring_base ) + return FT_Err_Ok; + zone->base = charstring_base; limit = zone->limit = charstring_base + charstring_len; ip = zone->cursor = zone->base; diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c index 5fb23b135..17337cc0f 100644 --- a/src/psaux/psobjs.c +++ b/src/psaux/psobjs.c @@ -2577,7 +2577,7 @@ FT_UShort seed ) { PS_Conv_EexecDecode( &buffer, - buffer + length, + FT_OFFSET( buffer, length ), buffer, length, &seed ); diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c index dcaad35e3..b4a673c6f 100644 --- a/src/smooth/ftsmooth.c +++ b/src/smooth/ftsmooth.c @@ -155,6 +155,9 @@ goto Exit; } + if ( !bitmap->rows || !bitmap->pitch ) + goto Exit; + /* allocate new one */ if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) ) goto Exit; |