mirror of
				https://github.com/SwallowOS/android_external_freetype
				synced 2025-11-04 06:44:11 +08:00 
			
		
		
		
	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:
		@@ -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_                                                    \
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /* */
 | 
			
		||||
 
 | 
			
		||||
@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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" ));
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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 */
 | 
			
		||||
 
 | 
			
		||||
@@ -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 );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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 )
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -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 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /**************************************************************************
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user