[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2] master 3645982 2/5: [otvalid] Macros for 32bit offset suppor
From: |
Werner LEMBERG |
Subject: |
[freetype2] master 3645982 2/5: [otvalid] Macros for 32bit offset support. |
Date: |
Fri, 22 Sep 2017 18:46:13 -0400 (EDT) |
branch: master
commit 3645982ac26c7a99bf77a3af2bf7eb6a3f871334
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>
[otvalid] Macros for 32bit offset support.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
---
ChangeLog | 7 +++++++
src/otvalid/otvcommn.h | 32 +++++++++++++++++++++++++++++++-
2 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 87af87c..b6ea66d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-09-22 Werner Lemberg <address@hidden>
+
+ [otvalid] Macros for 32bit offset support.
+
+ * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
+ OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
+
2017-09-21 Alexei Podtelezhnikov <address@hidden>
[build] Simplify Visual C++ 2010 project.
diff --git a/src/otvalid/otvcommn.h b/src/otvalid/otvcommn.h
index 5a94005..40a7985 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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] master 3645982 2/5: [otvalid] Macros for 32bit offset support.,
Werner LEMBERG <=