summaryrefslogtreecommitdiff
path: root/src/otvalid/otvcommn.h
diff options
context:
space:
mode:
authorWerner Lemberg <wl@gnu.org>2017-09-22 07:53:25 +0200
committerWerner Lemberg <wl@gnu.org>2017-09-22 07:53:25 +0200
commit3645982ac26c7a99bf77a3af2bf7eb6a3f871334 (patch)
treef46998069dceae37f51064b9f0d39919c3b5eb4f /src/otvalid/otvcommn.h
parent21c235ecf1383c408dc115c00eb95800c88d9f10 (diff)
downloadfreetype2-3645982ac26c7a99bf77a3af2bf7eb6a3f871334.tar.gz
[otvalid] Macros for 32bit offset support.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32, OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
Diffstat (limited to 'src/otvalid/otvcommn.h')
-rw-r--r--src/otvalid/otvcommn.h32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/otvalid/otvcommn.h b/src/otvalid/otvcommn.h
index 5a94005de..40a79851d 100644
--- a/src/otvalid/otvcommn.h
+++ b/src/otvalid/otvcommn.h
@@ -73,12 +73,21 @@ FT_BEGIN_HEADER
#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_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 ) \
@@ -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)