[FREETYPE] Update to v2.9.0 and use this as a chance to slim down our lib a bit....
[reactos.git] / sdk / lib / 3rdparty / freetype / src / otvalid / otvcommn.h
index 10a603e..a392784 100644 (file)
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    OpenType common tables validation (specification).                   */
 /*                                                                         */
-/*  Copyright 2004-2017 by                                                 */
+/*  Copyright 2004-2018 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -67,29 +67,38 @@ FT_BEGIN_HEADER
 
 
 #undef  FT_INVALID_
-#define FT_INVALID_( _error ) \
+#define FT_INVALID_( _error )                                     \
           ft_validator_error( otvalid->root, FT_THROW( _error ) )
 
 #define OTV_OPTIONAL_TABLE( _table )  FT_UShort  _table;      \
                                       FT_Bytes   _table ## _p
 
+#define OTV_OPTIONAL_TABLE32( _table )  FT_ULong  _table;       \
+                                        FT_Bytes   _table ## _p
+
 #define OTV_OPTIONAL_OFFSET( _offset )           \
           FT_BEGIN_STMNT                         \
             _offset ## _p = p;                   \
             _offset       = FT_NEXT_USHORT( p ); \
           FT_END_STMNT
 
-#define OTV_LIMIT_CHECK( _count )                    \
-          FT_BEGIN_STMNT                             \
+#define OTV_OPTIONAL_OFFSET32( _offset )        \
+          FT_BEGIN_STMNT                        \
+            _offset ## _p = p;                  \
+            _offset       = FT_NEXT_ULONG( p ); \
+          FT_END_STMNT
+
+#define OTV_LIMIT_CHECK( _count )                      \
+          FT_BEGIN_STMNT                               \
             if ( p + (_count) > otvalid->root->limit ) \
-              FT_INVALID_TOO_SHORT;                  \
+              FT_INVALID_TOO_SHORT;                    \
           FT_END_STMNT
 
 #define OTV_SIZE_CHECK( _size )                                     \
           FT_BEGIN_STMNT                                            \
             if ( _size > 0 && _size < table_size )                  \
             {                                                       \
-              if ( otvalid->root->level == FT_VALIDATE_PARANOID )     \
+              if ( otvalid->root->level == FT_VALIDATE_PARANOID )   \
                 FT_INVALID_OFFSET;                                  \
               else                                                  \
               {                                                     \
@@ -102,12 +111,33 @@ FT_BEGIN_HEADER
                             " set to zero.\n"                       \
                             "\n", #_size ));                        \
                                                                     \
-                /* always assume 16bit entities */                  \
                 _size = pp[0] = pp[1] = 0;                          \
               }                                                     \
             }                                                       \
           FT_END_STMNT
 
+#define OTV_SIZE_CHECK32( _size )                                   \
+          FT_BEGIN_STMNT                                            \
+            if ( _size > 0 && _size < table_size )                  \
+            {                                                       \
+              if ( otvalid->root->level == FT_VALIDATE_PARANOID )   \
+                FT_INVALID_OFFSET;                                  \
+              else                                                  \
+              {                                                     \
+                /* strip off `const' */                             \
+                FT_Byte*  pp = (FT_Byte*)_size ## _p;               \
+                                                                    \
+                                                                    \
+                FT_TRACE3(( "\n"                                    \
+                            "Invalid offset to optional table `%s'" \
+                            " set to zero.\n"                       \
+                            "\n", #_size ));                        \
+                                                                    \
+                _size = pp[0] = pp[1] = pp[2] = pp[3] = 0;          \
+              }                                                     \
+            }                                                       \
+          FT_END_STMNT
+
 
 #define  OTV_NAME_(x)  #x
 #define  OTV_NAME(x)   OTV_NAME_(x)
@@ -146,11 +176,11 @@ FT_BEGIN_HEADER
 
 #define OTV_INIT  otvalid->debug_indent = 0
 
-#define OTV_ENTER                                                              \
-          FT_BEGIN_STMNT                                                       \
-            otvalid->debug_indent += 2;                                        \
-            FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 ));                   \
-            FT_TRACE4(( "%s table\n",                                          \
+#define OTV_ENTER                                                                \
+          FT_BEGIN_STMNT                                                         \
+            otvalid->debug_indent += 2;                                          \
+            FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 ));                     \
+            FT_TRACE4(( "%s table\n",                                            \
                         otvalid->debug_function_name[otvalid->nesting_level] )); \
           FT_END_STMNT