[otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
* src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c (otv_GPOS_validate): Implement it.
This commit is contained in:
parent
2b79d25f22
commit
0da0faf0fb
|
@ -5,6 +5,13 @@
|
|||
* build/windows/ftver.rc: New VERSIONINFO resource.
|
||||
* build/windows/vc2010/freetype.vcxproj: Further improvements.
|
||||
|
||||
2017-09-23 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
|
||||
|
||||
* src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c
|
||||
(otv_GPOS_validate): Implement it.
|
||||
|
||||
2017-09-23 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[otvalid] Update common table handling to OpenType 1.8.2.
|
||||
|
|
|
@ -130,7 +130,7 @@
|
|||
otv_MarkArray_validate( table + Array1, otvalid );
|
||||
|
||||
otvalid->nesting_level++;
|
||||
func = otvalid->func[otvalid->nesting_level];
|
||||
func = otvalid->func[otvalid->nesting_level];
|
||||
otvalid->extra1 = ClassCount;
|
||||
|
||||
func( table + Array2, otvalid );
|
||||
|
@ -271,7 +271,7 @@
|
|||
|
||||
case 3:
|
||||
{
|
||||
FT_UInt table_size;
|
||||
FT_UInt table_size;
|
||||
|
||||
OTV_OPTIONAL_TABLE( XDeviceTable );
|
||||
OTV_OPTIONAL_TABLE( YDeviceTable );
|
||||
|
@ -537,7 +537,7 @@
|
|||
otv_ClassDef_validate( table + ClassDef2, otvalid );
|
||||
|
||||
OTV_LIMIT_CHECK( ClassCount1 * ClassCount2 *
|
||||
( len_value1 + len_value2 ) );
|
||||
( len_value1 + len_value2 ) );
|
||||
|
||||
/* Class1Record */
|
||||
for ( ; ClassCount1 > 0; ClassCount1-- )
|
||||
|
@ -985,20 +985,42 @@
|
|||
{
|
||||
OTV_ValidatorRec validrec;
|
||||
OTV_Validator otvalid = &validrec;
|
||||
FT_Bytes p = table;
|
||||
FT_Bytes p = table;
|
||||
FT_UInt table_size;
|
||||
FT_UShort version;
|
||||
FT_UInt ScriptList, FeatureList, LookupList;
|
||||
|
||||
OTV_OPTIONAL_TABLE32( featureVariations );
|
||||
|
||||
|
||||
otvalid->root = ftvalid;
|
||||
|
||||
FT_TRACE3(( "validating GPOS table\n" ));
|
||||
OTV_INIT;
|
||||
|
||||
OTV_LIMIT_CHECK( 10 );
|
||||
OTV_LIMIT_CHECK( 4 );
|
||||
|
||||
if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
|
||||
if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
|
||||
FT_INVALID_FORMAT;
|
||||
|
||||
version = FT_NEXT_USHORT( p ); /* minorVersion */
|
||||
|
||||
table_size = 10;
|
||||
switch ( version )
|
||||
{
|
||||
case 0:
|
||||
OTV_LIMIT_CHECK( 6 );
|
||||
break;
|
||||
|
||||
case 1:
|
||||
OTV_LIMIT_CHECK( 10 );
|
||||
table_size += 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
FT_INVALID_FORMAT;
|
||||
}
|
||||
|
||||
ScriptList = FT_NEXT_USHORT( p );
|
||||
FeatureList = FT_NEXT_USHORT( p );
|
||||
LookupList = FT_NEXT_USHORT( p );
|
||||
|
@ -1014,6 +1036,14 @@
|
|||
otv_ScriptList_validate( table + ScriptList, table + FeatureList,
|
||||
otvalid );
|
||||
|
||||
if ( version > 0 )
|
||||
{
|
||||
OTV_OPTIONAL_OFFSET32( featureVariations );
|
||||
OTV_SIZE_CHECK32( featureVariations );
|
||||
if ( featureVariations )
|
||||
OTV_TRACE(( " [omitting featureVariations validation]\n" )); /* XXX */
|
||||
}
|
||||
|
||||
FT_TRACE4(( "\n" ));
|
||||
}
|
||||
|
||||
|
|
|
@ -552,19 +552,41 @@
|
|||
OTV_ValidatorRec otvalidrec;
|
||||
OTV_Validator otvalid = &otvalidrec;
|
||||
FT_Bytes p = table;
|
||||
FT_UInt table_size;
|
||||
FT_UShort version;
|
||||
FT_UInt ScriptList, FeatureList, LookupList;
|
||||
|
||||
OTV_OPTIONAL_TABLE32( featureVariations );
|
||||
|
||||
|
||||
otvalid->root = ftvalid;
|
||||
|
||||
FT_TRACE3(( "validating GSUB table\n" ));
|
||||
OTV_INIT;
|
||||
|
||||
OTV_LIMIT_CHECK( 10 );
|
||||
OTV_LIMIT_CHECK( 4 );
|
||||
|
||||
if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
|
||||
if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
|
||||
FT_INVALID_FORMAT;
|
||||
|
||||
version = FT_NEXT_USHORT( p ); /* minorVersion */
|
||||
|
||||
table_size = 10;
|
||||
switch ( version )
|
||||
{
|
||||
case 0:
|
||||
OTV_LIMIT_CHECK( 6 );
|
||||
break;
|
||||
|
||||
case 1:
|
||||
OTV_LIMIT_CHECK( 10 );
|
||||
table_size += 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
FT_INVALID_FORMAT;
|
||||
}
|
||||
|
||||
ScriptList = FT_NEXT_USHORT( p );
|
||||
FeatureList = FT_NEXT_USHORT( p );
|
||||
LookupList = FT_NEXT_USHORT( p );
|
||||
|
@ -580,6 +602,14 @@
|
|||
otv_ScriptList_validate( table + ScriptList, table + FeatureList,
|
||||
otvalid );
|
||||
|
||||
if ( version > 0 )
|
||||
{
|
||||
OTV_OPTIONAL_OFFSET32( featureVariations );
|
||||
OTV_SIZE_CHECK32( featureVariations );
|
||||
if ( featureVariations )
|
||||
OTV_TRACE(( " [omitting featureVariations validation]\n" )); /* XXX */
|
||||
}
|
||||
|
||||
FT_TRACE4(( "\n" ));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue