freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master 2b79d25 1/4: [otvalid] Update common table handling t


From: Werner LEMBERG
Subject: [freetype2] master 2b79d25 1/4: [otvalid] Update common table handling to OpenType 1.8.2.
Date: Sun, 24 Sep 2017 03:17:00 -0400 (EDT)

branch: master
commit 2b79d25f2213aef0e3dc66f0e7f973fccede9c12
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    [otvalid] Update common table handling to OpenType 1.8.2.
    
    * src/otvalid/otvcommn.c (otv_Device_validate): Handle
    VariationIndex subtable.
    (otv_Lookup_validate): Handle MarkFilteringSet.
---
 ChangeLog              |  8 ++++++++
 src/otvalid/otvcommn.c | 28 +++++++++++++++++++---------
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4a04e8b..cf57a70 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,14 @@
        * build/windows/ftver.rc: New VERSIONINFO resource.
        * build/windows/vc2010/freetype.vcxproj: Further improvements.
 
+2017-09-23  Werner Lemberg  <address@hidden>
+
+       [otvalid] Update common table handling to OpenType 1.8.2.
+
+       * src/otvalid/otvcommn.c (otv_Device_validate): Handle
+       VariationIndex subtable.
+       (otv_Lookup_validate): Handle MarkFilteringSet.
+
 2017-09-23  Ben Wagner  <address@hidden>
 
        [truetype] Really fix #52082.
diff --git a/src/otvalid/otvcommn.c b/src/otvalid/otvcommn.c
index 3407d2a..0583620 100644
--- a/src/otvalid/otvcommn.c
+++ b/src/otvalid/otvcommn.c
@@ -313,19 +313,26 @@
 
     OTV_NAME_ENTER( "Device" );
 
-    OTV_LIMIT_CHECK( 8 );
+    OTV_LIMIT_CHECK( 6 );
     StartSize   = FT_NEXT_USHORT( p );
     EndSize     = FT_NEXT_USHORT( p );
     DeltaFormat = FT_NEXT_USHORT( p );
 
-    if ( DeltaFormat < 1 || DeltaFormat > 3 )
-      FT_INVALID_FORMAT;
+    if ( DeltaFormat == 0x8000U )
+    {
+      /* VariationIndex, nothing to do */
+    }
+    else
+    {
+      if ( DeltaFormat < 1 || DeltaFormat > 3 )
+        FT_INVALID_FORMAT;
 
-    if ( EndSize < StartSize )
-      FT_INVALID_DATA;
+      if ( EndSize < StartSize )
+        FT_INVALID_DATA;
 
-    count = EndSize - StartSize + 1;
-    OTV_LIMIT_CHECK( ( 1 << DeltaFormat ) * count / 8 );  /* DeltaValue */
+      count = EndSize - StartSize + 1;
+      OTV_LIMIT_CHECK( ( 1 << DeltaFormat ) * count / 8 );  /* DeltaValue */
+    }
 
     OTV_EXIT;
   }
@@ -347,7 +354,7 @@
                        OTV_Validator  otvalid )
   {
     FT_Bytes           p = table;
-    FT_UInt            LookupType, SubTableCount;
+    FT_UInt            LookupType, LookupFlag, SubTableCount;
     OTV_Validate_Func  validate;
 
 
@@ -355,7 +362,7 @@
 
     OTV_LIMIT_CHECK( 6 );
     LookupType    = FT_NEXT_USHORT( p );
-    p            += 2;                      /* skip LookupFlag */
+    LookupFlag    = FT_NEXT_USHORT( p );
     SubTableCount = FT_NEXT_USHORT( p );
 
     OTV_TRACE(( " (type %d)\n", LookupType ));
@@ -373,6 +380,9 @@
     for ( ; SubTableCount > 0; SubTableCount-- )
       validate( table + FT_NEXT_USHORT( p ), otvalid );
 
+    if ( LookupFlag & 0x10 )
+      OTV_LIMIT_CHECK( 2 );  /* MarkFilteringSet */
+
     OTV_EXIT;
   }
 



reply via email to

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