diff --git a/ChangeLog b/ChangeLog index 05b17723d..9bee9e4d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2018-06-17 Armin Hasitzka + + [bdf] Fix underflow of an unsigned value. + + bdflib.c:1562 could be reached with `font->glyphs_used == 0'. That + caused an underflow of the unsigned value which results in undefined + behaviour. + + * src/bdf/bdflib.c (src/bdf/bdflib.c): Bail out earlier than before + if the `ENCODING' keyword cannot be found. + 2018-06-17 Werner Lemberg [base] Add tracing for `FT_Bitmap_Blend'. diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c index 1b8d46069..5c0959132 100644 --- a/src/bdf/bdflib.c +++ b/src/bdf/bdflib.c @@ -1556,6 +1556,9 @@ goto Exit; } + if ( !( p->flags & BDF_ENCODING_ ) ) + goto Missing_Encoding; + /* Point at the glyph being constructed. */ if ( p->glyph_enc == -1 ) glyph = font->unencoded + ( font->unencoded_used - 1 ); @@ -1626,9 +1629,6 @@ /* Expect the SWIDTH (scalable width) field next. */ if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 ) { - if ( !( p->flags & BDF_ENCODING_ ) ) - goto Missing_Encoding; - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); if ( error ) goto Exit; @@ -1642,9 +1642,6 @@ /* Expect the DWIDTH (scalable width) field next. */ if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 ) { - if ( !( p->flags & BDF_ENCODING_ ) ) - goto Missing_Encoding; - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); if ( error ) goto Exit; @@ -1670,9 +1667,6 @@ /* Expect the BBX field next. */ if ( _bdf_strncmp( line, "BBX", 3 ) == 0 ) { - if ( !( p->flags & BDF_ENCODING_ ) ) - goto Missing_Encoding; - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); if ( error ) goto Exit;