diff options
author | Werner Lemberg <wl@gnu.org> | 2017-09-22 07:53:25 +0200 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2017-09-22 07:53:25 +0200 |
commit | 3645982ac26c7a99bf77a3af2bf7eb6a3f871334 (patch) | |
tree | f46998069dceae37f51064b9f0d39919c3b5eb4f /src/otvalid/otvcommn.h | |
parent | 21c235ecf1383c408dc115c00eb95800c88d9f10 (diff) | |
download | freetype2-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.h | 32 |
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) |