Fix invalid function pointer casts.

This change should allow Freetype to work on WASM/Emscripten without
needing `-s EMULATE_FUNCTION_POINTER_CASTS=1'.

* src/autofit/afdummy.c (af_dummy_hints_apply): Fix signature.

* src/cid/cidload.c (cid_parse_font_matrix, parse_fd_array,
parse_expansion_factor, parse_font_name): Return `void', not
`FT_Error'.

* include/freetype/internal/ftobjs.h (FT_CMap_CharVarIsDefaultFunc):
Fix signature.
This commit is contained in:
Andrei Alexeyev 2019-03-07 09:42:25 +01:00 committed by Werner Lemberg
parent 31757f969f
commit 2f4b740ce4
4 changed files with 38 additions and 16 deletions

View File

@ -1,3 +1,20 @@
2019-03-07 Andrei Alexeyev <0x416b617269@gmail.com>
Werner Lemberg <wl@gnu.org>
Fix invalid function pointer casts.
This change should allow Freetype to work on WASM/Emscripten without
needing `-s EMULATE_FUNCTION_POINTER_CASTS=1'.
* src/autofit/afdummy.c (af_dummy_hints_apply): Fix signature.
* src/cid/cidload.c (cid_parse_font_matrix, parse_fd_array,
parse_expansion_factor, parse_font_name): Return `void', not
`FT_Error'.
* include/freetype/internal/ftobjs.h (FT_CMap_CharVarIsDefaultFunc):
Fix signature.
2019-03-05 Werner Lemberg <wl@gnu.org> 2019-03-05 Werner Lemberg <wl@gnu.org>
[base] Handle numeric overflow (#55827). [base] Handle numeric overflow (#55827).

View File

@ -185,7 +185,7 @@ FT_BEGIN_HEADER
FT_UInt32 char_code, FT_UInt32 char_code,
FT_UInt32 variant_selector ); FT_UInt32 variant_selector );
typedef FT_Bool typedef FT_Int
(*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap, (*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap,
FT_UInt32 char_code, FT_UInt32 char_code,
FT_UInt32 variant_selector ); FT_UInt32 variant_selector );

View File

@ -38,13 +38,15 @@
static FT_Error static FT_Error
af_dummy_hints_apply( FT_UInt glyph_index, af_dummy_hints_apply( FT_UInt glyph_index,
AF_GlyphHints hints, AF_GlyphHints hints,
FT_Outline* outline ) FT_Outline* outline,
AF_StyleMetrics metrics )
{ {
FT_Error error; FT_Error error;
FT_UNUSED( glyph_index ); FT_UNUSED( glyph_index );
FT_UNUSED( metrics );
error = af_glyph_hints_reload( hints, outline ); error = af_glyph_hints_reload( hints, outline );

View File

@ -154,7 +154,7 @@
} }
FT_CALLBACK_DEF( FT_Error ) FT_CALLBACK_DEF( void )
cid_parse_font_matrix( CID_Face face, cid_parse_font_matrix( CID_Face face,
CID_Parser* parser ) CID_Parser* parser )
{ {
@ -179,7 +179,10 @@
result = cid_parser_to_fixed_array( parser, 6, temp, 3 ); result = cid_parser_to_fixed_array( parser, 6, temp, 3 );
if ( result < 6 ) if ( result < 6 )
return FT_THROW( Invalid_File_Format ); {
FT_ERROR(( "cid_parse_font_matrix: not enough matrix elements\n" ));
goto Exit;
}
FT_TRACE4(( " [%f %f %f %f %f %f]\n", FT_TRACE4(( " [%f %f %f %f %f %f]\n",
(double)temp[0] / 65536 / 1000, (double)temp[0] / 65536 / 1000,
@ -194,7 +197,7 @@
if ( temp_scale == 0 ) if ( temp_scale == 0 )
{ {
FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" )); FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" ));
return FT_THROW( Invalid_File_Format ); goto Exit;
} }
/* atypical case */ /* atypical case */
@ -220,7 +223,7 @@
{ {
FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" )); FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
parser->root.error = FT_THROW( Invalid_File_Format ); parser->root.error = FT_THROW( Invalid_File_Format );
return FT_THROW( Invalid_File_Format ); goto Exit;
} }
/* note that the font offsets are expressed in integer font units */ /* note that the font offsets are expressed in integer font units */
@ -228,11 +231,12 @@
offset->y = temp[5] >> 16; offset->y = temp[5] >> 16;
} }
return FT_Err_Ok; Exit:
return;
} }
FT_CALLBACK_DEF( FT_Error ) FT_CALLBACK_DEF( void )
parse_fd_array( CID_Face face, parse_fd_array( CID_Face face,
CID_Parser* parser ) CID_Parser* parser )
{ {
@ -247,7 +251,6 @@
if ( num_dicts < 0 ) if ( num_dicts < 0 )
{ {
FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" )); FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit; goto Exit;
} }
@ -304,7 +307,7 @@
} }
Exit: Exit:
return error; return;
} }
@ -312,7 +315,7 @@
/* and CID_FaceDictRec (both are public header files and can't */ /* and CID_FaceDictRec (both are public header files and can't */
/* changed). We simply copy the value. */ /* changed). We simply copy the value. */
FT_CALLBACK_DEF( FT_Error ) FT_CALLBACK_DEF( void )
parse_expansion_factor( CID_Face face, parse_expansion_factor( CID_Face face,
CID_Parser* parser ) CID_Parser* parser )
{ {
@ -329,7 +332,7 @@
FT_TRACE4(( "%d\n", dict->expansion_factor )); FT_TRACE4(( "%d\n", dict->expansion_factor ));
} }
return FT_Err_Ok; return;
} }
@ -337,7 +340,7 @@
/* `FontName' keyword. FreeType doesn't need it, but it is nice */ /* `FontName' keyword. FreeType doesn't need it, but it is nice */
/* to catch it for producing better trace output. */ /* to catch it for producing better trace output. */
FT_CALLBACK_DEF( FT_Error ) FT_CALLBACK_DEF( void )
parse_font_name( CID_Face face, parse_font_name( CID_Face face,
CID_Parser* parser ) CID_Parser* parser )
{ {
@ -361,7 +364,7 @@
FT_UNUSED( parser ); FT_UNUSED( parser );
#endif #endif
return FT_Err_Ok; return;
} }