Ignore:
Timestamp:
Jan 18, 2007, 5:32:59 PM (15 years ago)
Author:
Eugene Romanenko
Message:

freetype update to version 2.3.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/freetype2/src/gxvalid/gxvkern.c

    r150 r182  
    55/*    TrueTypeGX/AAT kern table validation (body).                         */
    66/*                                                                         */
    7 /*  Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
     7/*  Copyright 2004, 2005, 2006, 2007                                       */
     8/*  by suzuki toshiya, Masatake YAMATO, Red Hat K.K.,                      */
    89/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
    910/*                                                                         */
     
    107108
    108109  static void
     110  gxv_kern_subtable_fmt0_pairs_validate( FT_Bytes       table,
     111                                         FT_Bytes       limit,
     112                                         FT_UShort      nPairs,
     113                                         GXV_Validator  valid )
     114  {
     115    FT_Bytes   p = table;
     116    FT_UShort  i;
     117
     118    FT_UShort  last_gid_left  = 0;
     119    FT_UShort  last_gid_right = 0;
     120
     121    FT_UNUSED( limit );
     122
     123
     124    GXV_NAME_ENTER( "kern format 0 pairs" );
     125
     126    for ( i = 0; i < nPairs; i++ )
     127    {
     128      FT_UShort  gid_left;
     129      FT_UShort  gid_right;
     130      FT_Short   kernValue;
     131
     132
     133      /* left */
     134      gid_left  = FT_NEXT_USHORT( p );
     135      gxv_glyphid_validate( gid_left, valid );
     136
     137      /* right */
     138      gid_right = FT_NEXT_USHORT( p );
     139      gxv_glyphid_validate( gid_right, valid );
     140
     141      /* Pairs of left and right GIDs must be unique and sorted. */
     142      GXV_TRACE(( "left gid = %u, right gid = %u\n", gid_left, gid_right ));
     143      if ( gid_left == last_gid_left )
     144      {
     145        if ( last_gid_right < gid_right )
     146          last_gid_right = gid_right;
     147        else
     148          FT_INVALID_DATA;
     149      }
     150      else if ( last_gid_left < gid_left )
     151      {
     152        last_gid_left  = gid_left;
     153        last_gid_right = gid_right;
     154      }
     155      else
     156        FT_INVALID_DATA;
     157
     158      /* skip the kern value */
     159      kernValue = FT_NEXT_SHORT( p );
     160    }
     161
     162    GXV_EXIT;
     163  }
     164
     165  static void
    109166  gxv_kern_subtable_fmt0_validate( FT_Bytes       table,
    110167                                   FT_Bytes       limit,
     
    115172    FT_UShort  nPairs;
    116173    FT_UShort  unitSize;
    117     FT_UShort  i;
    118 
    119 
    120     GXV_NAME_ENTER( "kern subtable format0" );
     174
     175
     176    GXV_NAME_ENTER( "kern subtable format 0" );
    121177
    122178    unitSize = 2 + 2 + 2;
     
    128184    p += 2 + 2 + 2 + 2;
    129185
    130     for ( i = 0; i < nPairs; i++ )
    131     {
    132       FT_UShort  gid_left;
    133       FT_UShort  gid_right;
    134       FT_Short   kernValue;
    135 
    136       /* TODO: should be checked pairs are unique. */
    137 
    138 
    139       /* left */
    140       gid_left  = FT_NEXT_USHORT( p );
    141       gxv_glyphid_validate( gid_left, valid );
    142 
    143       /* right */
    144       gid_right = FT_NEXT_USHORT( p );
    145       gxv_glyphid_validate( gid_right, valid );
    146 
    147       /* skip the kern value */
    148       kernValue = FT_NEXT_SHORT( p );
    149     }
     186    gxv_kern_subtable_fmt0_pairs_validate( p, limit, nPairs, valid );
    150187
    151188    GXV_EXIT;
     
    267304
    268305
    269     GXV_NAME_ENTER( "kern subtable format1" );
     306    GXV_NAME_ENTER( "kern subtable format 1" );
    270307
    271308    valid->statetable.optdata =
     
    369406
    370407
    371     GXV_NAME_ENTER( "kern subtable format2" );
     408    GXV_NAME_ENTER( "kern subtable format 2" );
    372409
    373410    GXV_ODTECT_INIT( odtect );
     
    426463
    427464
    428     GXV_NAME_ENTER( "kern subtable format3" );
     465    GXV_NAME_ENTER( "kern subtable format 3" );
    429466
    430467    GXV_LIMIT_CHECK( 2 + 1 + 1 + 1 + 1 );
Note: See TracChangeset for help on using the changeset viewer.