summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Alexeyev <0x416b617269@gmail.com>2019-03-07 09:42:25 +0100
committerWerner Lemberg <wl@gnu.org>2019-03-07 09:43:05 +0100
commit2f4b740ce435bc1ad5ef8570bb91ab7cd5682720 (patch)
tree024627c2199ec1f25a3dcae87c62c54a68f46c98
parent31757f969fba60d75404f31e8f1168bef5011770 (diff)
downloadfreetype2-2f4b740ce435bc1ad5ef8570bb91ab7cd5682720.tar.gz
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.
-rw-r--r--ChangeLog17
-rw-r--r--include/freetype/internal/ftobjs.h2
-rw-r--r--src/autofit/afdummy.c8
-rw-r--r--src/cid/cidload.c27
4 files changed, 38 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index ae2d13228..5172696fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
[base] Handle numeric overflow (#55827).
diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h
index 9b94a5d75..f3a41b35a 100644
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -185,7 +185,7 @@ FT_BEGIN_HEADER
FT_UInt32 char_code,
FT_UInt32 variant_selector );
- typedef FT_Bool
+ typedef FT_Int
(*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap,
FT_UInt32 char_code,
FT_UInt32 variant_selector );
diff --git a/src/autofit/afdummy.c b/src/autofit/afdummy.c
index 6dd98d907..7e07a41e7 100644
--- a/src/autofit/afdummy.c
+++ b/src/autofit/afdummy.c
@@ -38,13 +38,15 @@
static FT_Error
- af_dummy_hints_apply( FT_UInt glyph_index,
- AF_GlyphHints hints,
- FT_Outline* outline )
+ af_dummy_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
+ FT_Outline* outline,
+ AF_StyleMetrics metrics )
{
FT_Error error;
FT_UNUSED( glyph_index );
+ FT_UNUSED( metrics );
error = af_glyph_hints_reload( hints, outline );
diff --git a/src/cid/cidload.c b/src/cid/cidload.c
index e94fb3328..fce3e37da 100644
--- a/src/cid/cidload.c
+++ b/src/cid/cidload.c
@@ -154,7 +154,7 @@
}
- FT_CALLBACK_DEF( FT_Error )
+ FT_CALLBACK_DEF( void )
cid_parse_font_matrix( CID_Face face,
CID_Parser* parser )
{
@@ -179,7 +179,10 @@
result = cid_parser_to_fixed_array( parser, 6, temp, 3 );
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",
(double)temp[0] / 65536 / 1000,
@@ -194,7 +197,7 @@
if ( temp_scale == 0 )
{
FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" ));
- return FT_THROW( Invalid_File_Format );
+ goto Exit;
}
/* atypical case */
@@ -220,7 +223,7 @@
{
FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
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 */
@@ -228,11 +231,12 @@
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,
CID_Parser* parser )
{
@@ -247,7 +251,6 @@
if ( num_dicts < 0 )
{
FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
- error = FT_THROW( Invalid_File_Format );
goto Exit;
}
@@ -304,7 +307,7 @@
}
Exit:
- return error;
+ return;
}
@@ -312,7 +315,7 @@
/* and CID_FaceDictRec (both are public header files and can't */
/* changed). We simply copy the value. */
- FT_CALLBACK_DEF( FT_Error )
+ FT_CALLBACK_DEF( void )
parse_expansion_factor( CID_Face face,
CID_Parser* parser )
{
@@ -329,7 +332,7 @@
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 */
/* to catch it for producing better trace output. */
- FT_CALLBACK_DEF( FT_Error )
+ FT_CALLBACK_DEF( void )
parse_font_name( CID_Face face,
CID_Parser* parser )
{
@@ -361,7 +364,7 @@
FT_UNUSED( parser );
#endif
- return FT_Err_Ok;
+ return;
}