diff options
author | Ben Wagner <bungeman@chromum.org> | 2023-04-17 11:17:16 -0400 |
---|---|---|
committer | Ben Wagner <bungeman@chromum.org> | 2023-04-17 12:32:04 -0400 |
commit | c4fe77c3f072fab930267f95510562e7aeb03302 (patch) | |
tree | a77ff618747c085561d80f2936e1e978c3b3bc9b | |
parent | ea9fca0add69e1613eee3290e18c1f8cb4d17a43 (diff) | |
download | freetype2-c4fe77c3f072fab930267f95510562e7aeb03302.tar.gz |
[truetype] tt_size_reset_height to take FT_Size
The `MetricsVariations` `FT_Size_Reset_Func` is defined to take an
`FT_Size`. Because `tt_size_reset_height` is to be used as such a
function, it must also take an `FT_Size` instead of a `TT_Size`. Even
though the pointers passed will be the same at runtime, calling a
function through a pointer of a different type from the original
function pointer type is undefined behavior. This may be caught at
runtime by Control Flow Integrity with something like clang's
`cfi-icall`.
Issue: https://crbug.com/1433651
* src/truetype/ttobjs.h (tt_size_reset_height): take `FT_Size`
* src/truetype/ttobjs.c (tt_size_reset_height): take `FT_Size` and
update documentation
-rw-r--r-- | src/truetype/ttobjs.c | 12 | ||||
-rw-r--r-- | src/truetype/ttobjs.h | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index ee4f3de1b..c351e082b 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -1346,12 +1346,16 @@ * Used for variation fonts as an iterator function. * * @Input: - * size :: - * A handle to the target size object. + * ft_size :: + * A handle to the target TT_Size object. This function will be called + * through a `FT_Size_Reset_Func` pointer which takes `FT_Size`. This + * function must take `FT_Size` as a result. The passed `FT_Size` is + * expected to point to a `TT_Size`. */ FT_LOCAL_DEF( FT_Error ) - tt_size_reset_height( TT_Size size ) + tt_size_reset_height( FT_Size ft_size ) { + TT_Size size = (TT_Size)ft_size; TT_Face face = (TT_Face)size->root.face; FT_Size_Metrics* size_metrics = &size->hinted_metrics; @@ -1408,7 +1412,7 @@ FT_Size_Metrics* size_metrics = &size->hinted_metrics; - error = tt_size_reset_height( size ); + error = tt_size_reset_height( (FT_Size)size ); if ( error ) return error; diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h index d74264e57..d1834c046 100644 --- a/src/truetype/ttobjs.h +++ b/src/truetype/ttobjs.h @@ -391,7 +391,7 @@ FT_BEGIN_HEADER #endif /* TT_USE_BYTECODE_INTERPRETER */ FT_LOCAL( FT_Error ) - tt_size_reset_height( TT_Size size ); + tt_size_reset_height( FT_Size size ); FT_LOCAL( FT_Error ) tt_size_reset( TT_Size size ); |