[otvalid] Handle `BASE' v1.1 table.

No validation of variation stuff yet.

* src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
This commit is contained in:
Werner Lemberg 2017-09-23 00:36:49 +02:00
parent 3645982ac2
commit 6756a18578
2 changed files with 38 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2017-09-22 Werner Lemberg <wl@gnu.org>
[otvalid] Handle `BASE' v1.1 table.
No validation of variation stuff yet.
* src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
2017-09-22 Werner Lemberg <wl@gnu.org>
[otvalid] Macros for 32bit offset support.

View File

@ -284,22 +284,41 @@
OTV_Validator otvalid = &otvalidrec;
FT_Bytes p = table;
FT_UInt table_size;
FT_UShort version;
OTV_OPTIONAL_TABLE( HorizAxis );
OTV_OPTIONAL_TABLE( VertAxis );
OTV_OPTIONAL_TABLE32( itemVarStore );
otvalid->root = ftvalid;
FT_TRACE3(( "validating BASE table\n" ));
OTV_INIT;
OTV_LIMIT_CHECK( 6 );
OTV_LIMIT_CHECK( 4 );
if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
FT_INVALID_FORMAT;
table_size = 6;
version = FT_NEXT_USHORT( p ); /* minorVersion */
table_size = 8;
switch ( version )
{
case 0:
OTV_LIMIT_CHECK( 4 );
break;
case 1:
OTV_LIMIT_CHECK( 8 );
table_size += 4;
break;
default:
FT_INVALID_FORMAT;
}
OTV_OPTIONAL_OFFSET( HorizAxis );
OTV_SIZE_CHECK( HorizAxis );
@ -311,6 +330,14 @@
if ( VertAxis )
otv_Axis_validate( table + VertAxis, otvalid );
if ( version > 0 )
{
OTV_OPTIONAL_OFFSET32( itemVarStore );
OTV_SIZE_CHECK32( itemVarStore );
if ( itemVarStore )
OTV_TRACE(( " [omitting itemVarStore validation]\n" )); /* XXX */
}
FT_TRACE4(( "\n" ));
}