diff options
author | Werner Lemberg <wl@gnu.org> | 2018-06-24 06:22:48 +0200 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2018-06-24 06:26:09 +0200 |
commit | cc3333902bbfe5d8c16cf84c4e85016533ab2ee0 (patch) | |
tree | 2917e1d3116623cfd633cbedc2e8990e9355d7bc /src/cff | |
parent | d7393e22ee3d7cfedbf580a7fb1e9b4db7b3626f (diff) | |
download | freetype2-cc3333902bbfe5d8c16cf84c4e85016533ab2ee0.tar.gz |
New base function `FT_Matrix_Check' (#54019).
* src/base/ftcalc.c (FT_Matrix_Check): New base function to properly
reject degenerate font matrices.
* include/freetype/internal/ftcalc.h: Updated.
* src/cff/cffparse.c (cff_parse_font_matrix), src/cid/cidload.c
(cid_parse_font_matrix), src/type1/t1load.c (t1_parse_font_matrix),
src/type42/t42parse.c (t42_parse_font_matrix): Use
`FT_Matrix_Check'.
Diffstat (limited to 'src/cff')
-rw-r--r-- | src/cff/cffparse.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c index 41cc1dde6..0e5f9512b 100644 --- a/src/cff/cffparse.c +++ b/src/cff/cffparse.c @@ -604,7 +604,6 @@ FT_Vector* offset = &dict->font_offset; FT_ULong* upm = &dict->units_per_em; FT_Byte** data = parser->stack; - FT_Error error = FT_ERR( Stack_Underflow ); if ( parser->top >= parser->stack + 6 ) @@ -616,8 +615,6 @@ int i; - error = FT_Err_Ok; - dict->has_font_matrix = TRUE; /* We expect a well-formed font matrix, this is, the matrix elements */ @@ -646,22 +643,11 @@ ( max_scaling - min_scaling ) < 0 || ( max_scaling - min_scaling ) > 9 ) { - /* Return default matrix in case of unlikely values. */ - FT_TRACE1(( "cff_parse_font_matrix:" " strange scaling values (minimum %d, maximum %d),\n" " " " using default matrix\n", min_scaling, max_scaling )); - - matrix->xx = 0x10000L; - matrix->yx = 0; - matrix->xy = 0; - matrix->yy = 0x10000L; - offset->x = 0; - offset->y = 0; - *upm = 1; - - goto Exit; + goto Unlikely; } for ( i = 0; i < 6; i++ ) @@ -708,10 +694,31 @@ (double)matrix->yy / *upm / 65536, (double)offset->x / *upm / 65536, (double)offset->y / *upm / 65536 )); + + if ( !FT_Matrix_Check( matrix ) ) + { + FT_TRACE1(( "cff_parse_font_matrix:" + " degenerate values, using default matrix\n" )); + goto Unlikely; + } + + return FT_Err_Ok; } + else + return FT_THROW( Stack_Underflow ); - Exit: - return error; + Unlikely: + /* Return default matrix in case of unlikely values. */ + + matrix->xx = 0x10000L; + matrix->yx = 0; + matrix->xy = 0; + matrix->yy = 0x10000L; + offset->x = 0; + offset->y = 0; + *upm = 1; + + return FT_Err_Ok; } |