/**************************************************************************** * * gxvcommn.h * * TrueTypeGX/AAT common tables validation (specification). * * Copyright (C) 2004-2023 by * suzuki toshiya, Masatake YAMATO, Red Hat K.K., * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, * modified, and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * */ /**************************************************************************** * * gxvalid is derived from both gxlayout module and otvalid module. * Development of gxlayout is supported by the Information-technology * Promotion Agency(IPA), Japan. * */ /* * keywords in variable naming * --------------------------- * table: Of type FT_Bytes, pointing to the start of this table/subtable. * limit: Of type FT_Bytes, pointing to the end of this table/subtable, * including padding for alignment. * offset: Of type FT_UInt, the number of octets from the start to target. * length: Of type FT_UInt, the number of octets from the start to the * end in this table/subtable, including padding for alignment. * * _MIN, _MAX: Should be added to the tail of macros, as INT_MIN, etc. */ #ifndef GXVCOMMN_H_ #define GXVCOMMN_H_ #include "gxvalid.h" #include <freetype/internal/ftdebug.h> #include <freetype/ftsnames.h> FT_BEGIN_HEADER /* some variables are not evaluated or only used in trace */ #ifdef FT_DEBUG_LEVEL_TRACE #define GXV_LOAD_TRACE_VARS #else #undef GXV_LOAD_TRACE_VARS #endif #undef GXV_LOAD_UNUSED_VARS /* debug purpose */ #define IS_PARANOID_VALIDATION … #define GXV_SET_ERR_IF_PARANOID( err ) … /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** VALIDATION *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ GXV_Validator; #define DUMMY_LIMIT … GXV_Validate_Func; /* ====================== LookupTable Validator ======================== */ GXV_LookupValueDesc; GXV_LookupValueCPtr; GXV_LookupValue_SignSpec; GXV_Lookup_Value_Validate_Func; GXV_Lookup_Fmt4_Transit_Func; /* ====================== StateTable Validator ========================= */ GXV_GlyphOffset_Format; #define GXV_GLYPHOFFSET_FMT( table ) … #define GXV_GLYPHOFFSET_SIZE( table ) … /* ----------------------- 16bit StateTable ---------------------------- */ GXV_StateTable_GlyphOffsetDesc; GXV_StateTable_GlyphOffsetCPtr; GXV_StateTable_Subtable_Setup_Func; GXV_StateTable_Entry_Validate_Func; GXV_StateTable_OptData_Load_Func; GXV_StateTable_ValidatorRecData; /* ---------------------- 32bit XStateTable ---------------------------- */ GXV_XStateTable_GlyphOffsetDesc; GXV_XStateTable_GlyphOffsetCPtr; GXV_XStateTable_Subtable_Setup_Func; GXV_XStateTable_Entry_Validate_Func; GXV_XStateTable_OptData_Load_Func; GXV_XStateTable_ValidatorRecData; /* ===================================================================== */ GXV_ValidatorRec; #define GXV_TABLE_DATA( tag, field ) … #undef FT_INVALID_ #define FT_INVALID_( _error ) … #define GXV_LIMIT_CHECK( _count ) … #ifdef FT_DEBUG_LEVEL_TRACE #define GXV_INIT … #define GXV_NAME_ENTER … #define GXV_EXIT … #define GXV_TRACE … #else /* !FT_DEBUG_LEVEL_TRACE */ #define GXV_INIT … #define GXV_NAME_ENTER( name ) … #define GXV_EXIT … #define GXV_TRACE( s ) … #endif /* !FT_DEBUG_LEVEL_TRACE */ /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** 32bit alignment checking *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ #define GXV_32BIT_ALIGNMENT_VALIDATE( a ) … /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** Dumping Binary Data *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ #define GXV_TRACE_HEXDUMP( p, len ) … #define GXV_TRACE_HEXDUMP_C( p, len ) … #define GXV_TRACE_HEXDUMP_SFNTNAME( n ) … /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** LOOKUP TABLE *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_BinSrchHeader_validate( FT_Bytes p, FT_Bytes limit, FT_UShort* unitSize_p, FT_UShort* nUnits_p, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_LookupTable_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** Glyph ID *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( FT_Int ) gxv_glyphid_validate( FT_UShort gid, GXV_Validator gxvalid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** CONTROL POINT *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_ctlPoint_validate( FT_UShort gid, FT_UShort ctl_point, GXV_Validator gxvalid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** SFNT NAME *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_sfntName_validate( FT_UShort name_index, FT_UShort min_index, FT_UShort max_index, GXV_Validator gxvalid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** STATE TABLE *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_StateTable_subtable_setup( FT_UShort table_size, FT_UShort classTable, FT_UShort stateArray, FT_UShort entryTable, FT_UShort* classTable_length_p, FT_UShort* stateArray_length_p, FT_UShort* entryTable_length_p, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_XStateTable_subtable_setup( FT_ULong table_size, FT_ULong classTable, FT_ULong stateArray, FT_ULong entryTable, FT_ULong* classTable_length_p, FT_ULong* stateArray_length_p, FT_ULong* entryTable_length_p, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_StateTable_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_XStateTable_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** UTILITY MACROS AND FUNCTIONS *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_array_getlimits_byte( FT_Bytes table, FT_Bytes limit, FT_Byte* min, FT_Byte* max, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_array_getlimits_ushort( FT_Bytes table, FT_Bytes limit, FT_UShort* min, FT_UShort* max, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_set_length_by_ushort_offset( FT_UShort* offset, FT_UShort** length, FT_UShort* buff, FT_UInt nmemb, FT_UShort limit, GXV_Validator gxvalid ); FT_LOCAL( void ) gxv_set_length_by_ulong_offset( FT_ULong* offset, FT_ULong** length, FT_ULong* buff, FT_UInt nmemb, FT_ULong limit, GXV_Validator gxvalid); #define GXV_SUBTABLE_OFFSET_CHECK( _offset ) … #define GXV_SUBTABLE_LIMIT_CHECK( _count ) … #define GXV_USHORT_TO_SHORT( _us ) … #define GXV_STATETABLE_HEADER_SIZE … #define GXV_STATEHEADER_SIZE … #define GXV_XSTATETABLE_HEADER_SIZE … #define GXV_XSTATEHEADER_SIZE … /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** Table overlapping *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ GXV_odtect_Data; GXV_odtect_Range; FT_LOCAL( void ) gxv_odtect_add_range( FT_Bytes start, FT_ULong length, const FT_String* name, GXV_odtect_Range odtect ); FT_LOCAL( void ) gxv_odtect_validate( GXV_odtect_Range odtect, GXV_Validator gxvalid ); #define GXV_ODTECT( n, odtect ) … #define GXV_ODTECT_INIT( odtect ) … /* */ FT_END_HEADER #endif /* GXVCOMMN_H_ */ /* END */