Merge tag 'android-security-11.0.0_r70' of https://android.googlesource.com/platform/external/freetype into staging/lineage-18.1_merge_android-security-11.0.0_r70

Android Security 11.0.0 Release 70 (10286620)

* tag 'android-security-11.0.0_r70' of https://android.googlesource.com/platform/external/freetype:
  Cherrypick following three changes

Change-Id: Ideb7402a08b3b1c43d670b6e67625f7038a84e60
This commit is contained in:
Kevin F. Haggerty
2023-08-07 19:14:25 -06:00
10 changed files with 99 additions and 58 deletions

View File

@@ -77,6 +77,9 @@ FT_BEGIN_HEADER
typedef void
(*FT_Metrics_Adjust_Func)( FT_Face face );
typedef FT_Error
(*FT_Size_Reset_Func)( FT_Size size );
FT_DEFINE_SERVICE( MetricsVariations )
{
@@ -90,6 +93,7 @@ FT_BEGIN_HEADER
FT_VOrg_Adjust_Func vorg_adjust;
FT_Metrics_Adjust_Func metrics_adjust;
FT_Size_Reset_Func size_reset;
};
@@ -101,7 +105,8 @@ FT_BEGIN_HEADER
tsb_adjust_, \
bsb_adjust_, \
vorg_adjust_, \
metrics_adjust_ ) \
metrics_adjust_, \
size_reset_ ) \
static const FT_Service_MetricsVariationsRec class_ = \
{ \
hadvance_adjust_, \
@@ -111,7 +116,8 @@ FT_BEGIN_HEADER
tsb_adjust_, \
bsb_adjust_, \
vorg_adjust_, \
metrics_adjust_ \
metrics_adjust_, \
size_reset_ \
};
/* */

View File

@@ -1509,8 +1509,14 @@ FT_BEGIN_HEADER
void* mm;
/* a typeless pointer to the FT_Service_MetricsVariationsRec table */
/* used to handle the HVAR, VVAR, and MVAR OpenType tables */
void* var;
/* used to handle the HVAR, VVAR, and MVAR OpenType tables by the */
/* "truetype" driver */
void* tt_var;
/* a typeless pointer to the FT_Service_MetricsVariationsRec table */
/* used to handle the HVAR, VVAR, and MVAR OpenType tables by this */
/* TT_Face's driver */
void* face_var;
#endif
/* a typeless pointer to the PostScript Aux service */

View File

@@ -966,7 +966,8 @@
FT_UInt gindex,
FT_Int *avalue )
{
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
FT_Service_MetricsVariations
var = (FT_Service_MetricsVariations)face->tt_var;
return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
@@ -976,7 +977,8 @@
static void
cff_metrics_adjust( CFF_Face face )
{
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
FT_Service_MetricsVariations
var = (FT_Service_MetricsVariations)face->tt_var;
var->metrics_adjust( FT_FACE( face ) );
@@ -995,7 +997,8 @@
(FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
(FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
(FT_Metrics_Adjust_Func) cff_metrics_adjust /* metrics_adjust */
(FT_Metrics_Adjust_Func) cff_metrics_adjust, /* metrics_adjust */
(FT_Size_Reset_Func) NULL /* size_reset */
)
#endif

View File

@@ -709,8 +709,10 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
{
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
FT_Service_MultiMasters
mm = (FT_Service_MultiMasters)face->mm;
FT_Service_MetricsVariations
var = (FT_Service_MetricsVariations)face->face_var;
FT_UInt instance_index = (FT_UInt)face_index >> 16;

View File

@@ -499,17 +499,23 @@
0 );
}
if ( !face->var )
if ( !face->tt_var )
{
/* we want the metrics variations interface */
/* from the `truetype' module only */
FT_Module tt_module = FT_Get_Module( library, "truetype" );
face->var = ft_module_get_service( tt_module,
FT_SERVICE_ID_METRICS_VARIATIONS,
0 );
face->tt_var = ft_module_get_service( tt_module,
FT_SERVICE_ID_METRICS_VARIATIONS,
0 );
}
if ( !face->face_var )
face->face_var = ft_module_get_service(
&face->root.driver->root,
FT_SERVICE_ID_METRICS_VARIATIONS,
0 );
#endif
FT_TRACE2(( "SFNT driver\n" ));

View File

@@ -240,7 +240,7 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_Service_MetricsVariations var =
(FT_Service_MetricsVariations)face->var;
(FT_Service_MetricsVariations)face->tt_var;
#endif

View File

@@ -307,7 +307,7 @@
/* use the scaled metrics, even when tt_size_reset fails */
FT_Select_Metrics( size->face, strike_index );
tt_size_reset( ttsize, 0 ); /* ignore return value */
tt_size_reset( ttsize ); /* ignore return value */
}
else
{
@@ -359,7 +359,7 @@
if ( FT_IS_SCALABLE( size->face ) )
{
error = tt_size_reset( ttsize, 0 );
error = tt_size_reset( ttsize );
#ifdef TT_USE_BYTECODE_INTERPRETER
/* for the `MPS' bytecode instruction we need the point size */
@@ -525,7 +525,8 @@
(FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
(FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
(FT_Metrics_Adjust_Func) tt_apply_mvar /* metrics_adjust */
(FT_Metrics_Adjust_Func) tt_apply_mvar, /* metrics_adjust */
(FT_Size_Reset_Func) tt_size_reset_height /* size_reset */
)
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */

View File

@@ -1299,15 +1299,14 @@
static FT_Error
tt_size_reset_iterator( FT_ListNode node,
ft_size_reset_iterator( FT_ListNode node,
void* user )
{
TT_Size size = (TT_Size)node->data;
FT_UNUSED( user );
FT_Size size = (FT_Size)node->data;
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)user;
tt_size_reset( size, 1 );
var->size_reset( size );
return FT_Err_Ok;
}
@@ -1380,6 +1379,9 @@
/* adjust all derived values */
{
FT_Service_MetricsVariations var =
(FT_Service_MetricsVariations)face->face_var;
FT_Face root = &face->root;
/*
@@ -1421,11 +1423,12 @@
face->postscript.underlineThickness / 2;
root->underline_thickness = face->postscript.underlineThickness;
/* iterate over all FT_Size objects and call `tt_size_reset' */
/* to propagate the metrics changes */
FT_List_Iterate( &root->sizes_list,
tt_size_reset_iterator,
NULL );
/* iterate over all FT_Size objects and call `var->size_reset' */
/* to propagate the metrics changes */
if ( var && var->size_reset )
FT_List_Iterate( &root->sizes_list,
ft_size_reset_iterator,
(void*)var );
}
}

View File

@@ -1284,39 +1284,29 @@
/**************************************************************************
*
* @Function:
* tt_size_reset
* tt_size_reset_height
*
* @Description:
* Reset a TrueType size when resolutions and character dimensions
* have been changed.
* Recompute a TrueType size's ascender, descender, and height
* when resolutions and character dimensions have been changed.
* Used for variation fonts as an iterator function.
*
* @Input:
* size ::
* A handle to the target size object.
*
* only_height ::
* Only recompute ascender, descender, and height;
* this flag is used for variation fonts where
* `tt_size_reset' is used as an iterator function.
* 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( TT_Size size,
FT_Bool only_height )
tt_size_reset_height( FT_Size ft_size )
{
TT_Face face;
FT_Size_Metrics* size_metrics;
face = (TT_Face)size->root.face;
/* nothing to do for CFF2 */
if ( face->is_cff2 )
return FT_Err_Ok;
TT_Size size = (TT_Size)ft_size;
TT_Face face = (TT_Face)size->root.face;
FT_Size_Metrics* size_metrics = &size->hinted_metrics;
size->ttmetrics.valid = FALSE;
size_metrics = &size->hinted_metrics;
/* copy the result from base layer */
*size_metrics = size->root.metrics;
@@ -1343,12 +1333,34 @@
size->ttmetrics.valid = TRUE;
if ( only_height )
{
/* we must not recompute the scaling values here since */
/* `tt_size_reset' was already called (with only_height = 0) */
return FT_Err_Ok;
}
return FT_Err_Ok;
}
/**************************************************************************
*
* @Function:
* tt_size_reset
*
* @Description:
* Reset a TrueType size when resolutions and character dimensions
* have been changed.
*
* @Input:
* size ::
* A handle to the target size object.
*/
FT_LOCAL_DEF( FT_Error )
tt_size_reset( TT_Size size )
{
FT_Error error;
TT_Face face = (TT_Face)size->root.face;
FT_Size_Metrics* size_metrics = &size->hinted_metrics;
error = tt_size_reset_height( (FT_Size)size );
if ( error )
return error;
if ( face->header.Flags & 8 )
{

View File

@@ -390,8 +390,10 @@ FT_BEGIN_HEADER
#endif /* TT_USE_BYTECODE_INTERPRETER */
FT_LOCAL( FT_Error )
tt_size_reset( TT_Size size,
FT_Bool only_height );
tt_size_reset_height( FT_Size size );
FT_LOCAL( FT_Error )
tt_size_reset( TT_Size size );
/**************************************************************************