/[freetype]/freetype2/src/gxvalid/gxvtrak.c
ViewVC logotype

Diff of /freetype2/src/gxvalid/gxvtrak.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by mpsuzuki, Wed Aug 24 04:31:31 2005 UTC revision 1.2 by wl, Mon Sep 5 19:31:27 2005 UTC
# Line 16  Line 16 
16  /***************************************************************************/  /***************************************************************************/
17    
18  /***************************************************************************/  /***************************************************************************/
19    /*                                                                         */
20  /* gxvalid is derived from both gxlayout module and otvalid module.        */  /* gxvalid is derived from both gxlayout module and otvalid module.        */
21  /* Development of gxlayout was support of Information-technology Promotion */  /* Development of gxlayout is supported by the Information-technology      */
22  /* Agency(IPA), Japan.                                                     */  /* Promotion Agency(IPA), Japan.                                           */
23    /*                                                                         */
24  /***************************************************************************/  /***************************************************************************/
25    
26    
# Line 45  Line 47 
47    /*************************************************************************/    /*************************************************************************/
48    
49      /*      /*
50       * refered track table format specification:       * referred track table format specification:
51       * http://developer.apple.com/fonts/TTRefMan/RM06/Chap6trak.html       * http://developer.apple.com/fonts/TTRefMan/RM06/Chap6trak.html
52       * last update is 1996.       * last update was 1996.
53       * ----------------------------------------------       * ----------------------------------------------
54       * [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN       * [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN
55       * version          (fixed:  32bit) = 0x00010000       * version          (fixed:  32bit) = 0x00010000
# Line 75  Line 77 
77    
78    } GXV_trak_DataRec, *GXV_trak_Data;    } GXV_trak_DataRec, *GXV_trak_Data;
79    
80  #define  GXV_TRAK_DATA(FIELD)       GXV_TABLE_DATA( trak, FIELD )  
81    #define GXV_TRAK_DATA( FIELD )  GXV_TABLE_DATA( trak, FIELD )
82    
83    
84    /*************************************************************************/    /*************************************************************************/
85    /*************************************************************************/    /*************************************************************************/
# Line 89  Line 93 
93    gxv_trak_trackTable_validate( FT_Bytes       table,    gxv_trak_trackTable_validate( FT_Bytes       table,
94                                  FT_Bytes       limit,                                  FT_Bytes       limit,
95                                  FT_UShort      nTracks,                                  FT_UShort      nTracks,
                                 FT_UShort      nSizes,  
96                                  GXV_Validator  valid )                                  GXV_Validator  valid )
97    {    {
98      FT_Bytes   p = table;      FT_Bytes   p = table;
# Line 102  Line 105 
105    
106      GXV_NAME_ENTER( "trackTable" );      GXV_NAME_ENTER( "trackTable" );
107    
108      GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFF;      GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFFU;
109      GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000;      GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000;
110    
111      for ( i = 0; i < nTracks; i ++ )      for ( i = 0; i < nTracks; i ++ )
# Line 120  Line 123 
123        gxv_sfntName_validate( nameIndex, 256, 32767, valid );        gxv_sfntName_validate( nameIndex, 256, 32767, valid );
124      }      }
125    
126      valid->subtable_length = ( p - table );      valid->subtable_length = p - table;
127      GXV_EXIT;      GXV_EXIT;
128    }    }
129    
# Line 149  Line 152 
152    
153      gxv_odtect_add_range( table, p - table, "trackData header", odtect );      gxv_odtect_add_range( table, p - table, "trackData header", odtect );
154    
   
155      /* validate trackTable */      /* validate trackTable */
156      gxv_trak_trackTable_validate( p, limit, nTracks, nSizes, valid );      gxv_trak_trackTable_validate( p, limit, nTracks, valid );
157      gxv_odtect_add_range( p, valid->subtable_length,      gxv_odtect_add_range( p, valid->subtable_length,
158                            "trackTable", odtect );                            "trackTable", odtect );
159    
   
160      /* sizeTable is array of FT_Fixed, don't check contents */      /* sizeTable is array of FT_Fixed, don't check contents */
161      p = valid->root->base + sizeTableOffset;      p = valid->root->base + sizeTableOffset;
162      GXV_LIMIT_CHECK( nSizes * 4 );      GXV_LIMIT_CHECK( nSizes * 4 );
163      gxv_odtect_add_range( p, ( nSizes * 4 ), "sizeTable", odtect );      gxv_odtect_add_range( p, nSizes * 4, "sizeTable", odtect );
   
164    
165      /* validate trackValueOffet */      /* validate trackValueOffet */
166      p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_min );      p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_min );
167      if ( ( limit - p ) < ( nTracks * nSizes * 2 ) )      if ( limit - p < nTracks * nSizes * 2 )
168        GXV_TRACE(( "too short trackValue array\n" ));        GXV_TRACE(( "too short trackValue array\n" ));
169    
170      p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_max );      p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_max );
# Line 174  Line 174 
174                              + GXV_TRAK_DATA( trackValueOffset_min ),                              + GXV_TRAK_DATA( trackValueOffset_min ),
175                            GXV_TRAK_DATA( trackValueOffset_max )                            GXV_TRAK_DATA( trackValueOffset_max )
176                              - GXV_TRAK_DATA( trackValueOffset_min )                              - GXV_TRAK_DATA( trackValueOffset_min )
177                              + ( nSizes * 2 ),                              + nSizes * 2,
178                            "trackValue array", odtect );                            "trackValue array", odtect );
179    
   
180      gxv_odtect_validate( odtect, valid );      gxv_odtect_validate( odtect, valid );
181    
182      GXV_EXIT;      GXV_EXIT;
# Line 215  Line 214 
214    
215      GXV_ODTECT( 3, odtect );      GXV_ODTECT( 3, odtect );
216    
   
217      GXV_ODTECT_INIT( odtect );      GXV_ODTECT_INIT( odtect );
218      valid->root       = ftvalid;      valid->root       = ftvalid;
219      valid->table_data = trak;      valid->table_data = trak;
220      valid->face       = face;      valid->face       = face;
221    
   
222      limit      = valid->root->limit;      limit      = valid->root->limit;
223      table_size = limit - table;      table_size = limit - table;
224    
225      FT_TRACE3(( "validation trak table\n" ));      FT_TRACE3(( "validating `trak' table\n" ));
226      GXV_INIT;      GXV_INIT;
227    
228      GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 + 2 );      GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 + 2 );
# Line 256  Line 253 
253      if ( reserved != 0x0000 )      if ( reserved != 0x0000 )
254        FT_INVALID_DATA;        FT_INVALID_DATA;
255    
   
256      /* validate trackData */      /* validate trackData */
257      if ( 0 < horizOffset )      if ( 0 < horizOffset )
258      {      {
# Line 274  Line 270 
270    
271      gxv_odtect_validate( odtect, valid );      gxv_odtect_validate( odtect, valid );
272    
   
273      FT_TRACE4(( "\n" ));      FT_TRACE4(( "\n" ));
274    }    }
275    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26