freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master 6756a18 3/5: [otvalid] Handle `BASE' v1.1 table.


From: Werner LEMBERG
Subject: [freetype2] master 6756a18 3/5: [otvalid] Handle `BASE' v1.1 table.
Date: Fri, 22 Sep 2017 18:46:14 -0400 (EDT)

branch: master
commit 6756a18578183c9a76d8042dadf309008a1ee618
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    [otvalid] Handle `BASE' v1.1 table.
    
    No validation of variation stuff yet.
    
    * src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
---
 ChangeLog             |  8 ++++++++
 src/otvalid/otvbase.c | 33 ++++++++++++++++++++++++++++++---
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b6ea66d..a06bbbd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2017-09-22  Werner Lemberg  <address@hidden>
 
+       [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  <address@hidden>
+
        [otvalid] Macros for 32bit offset support.
 
        * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
diff --git a/src/otvalid/otvbase.c b/src/otvalid/otvbase.c
index 3adad84..48ae961 100644
--- a/src/otvalid/otvbase.c
+++ b/src/otvalid/otvbase.c
@@ -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" ));
   }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]