vrshoot

annotate libs/ft2static/freetype/internal/ftvalid.h @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
rev   line source
nuclear@0 1 /***************************************************************************/
nuclear@0 2 /* */
nuclear@0 3 /* ftvalid.h */
nuclear@0 4 /* */
nuclear@0 5 /* FreeType validation support (specification). */
nuclear@0 6 /* */
nuclear@0 7 /* Copyright 2004 by */
nuclear@0 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
nuclear@0 9 /* */
nuclear@0 10 /* This file is part of the FreeType project, and may only be used, */
nuclear@0 11 /* modified, and distributed under the terms of the FreeType project */
nuclear@0 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
nuclear@0 13 /* this file you indicate that you have read the license and */
nuclear@0 14 /* understand and accept it fully. */
nuclear@0 15 /* */
nuclear@0 16 /***************************************************************************/
nuclear@0 17
nuclear@0 18
nuclear@0 19 #ifndef __FTVALID_H__
nuclear@0 20 #define __FTVALID_H__
nuclear@0 21
nuclear@0 22 #include <ft2build.h>
nuclear@0 23 #include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */
nuclear@0 24
nuclear@0 25
nuclear@0 26 FT_BEGIN_HEADER
nuclear@0 27
nuclear@0 28
nuclear@0 29 /*************************************************************************/
nuclear@0 30 /*************************************************************************/
nuclear@0 31 /*************************************************************************/
nuclear@0 32 /**** ****/
nuclear@0 33 /**** ****/
nuclear@0 34 /**** V A L I D A T I O N ****/
nuclear@0 35 /**** ****/
nuclear@0 36 /**** ****/
nuclear@0 37 /*************************************************************************/
nuclear@0 38 /*************************************************************************/
nuclear@0 39 /*************************************************************************/
nuclear@0 40
nuclear@0 41 /* handle to a validation object */
nuclear@0 42 typedef struct FT_ValidatorRec_ volatile* FT_Validator;
nuclear@0 43
nuclear@0 44
nuclear@0 45 /*************************************************************************/
nuclear@0 46 /* */
nuclear@0 47 /* There are three distinct validation levels defined here: */
nuclear@0 48 /* */
nuclear@0 49 /* FT_VALIDATE_DEFAULT :: */
nuclear@0 50 /* A table that passes this validation level can be used reliably by */
nuclear@0 51 /* FreeType. It generally means that all offsets have been checked to */
nuclear@0 52 /* prevent out-of-bound reads, that array counts are correct, etc. */
nuclear@0 53 /* */
nuclear@0 54 /* FT_VALIDATE_TIGHT :: */
nuclear@0 55 /* A table that passes this validation level can be used reliably and */
nuclear@0 56 /* doesn't contain invalid data. For example, a charmap table that */
nuclear@0 57 /* returns invalid glyph indices will not pass, even though it can */
nuclear@0 58 /* be used with FreeType in default mode (the library will simply */
nuclear@0 59 /* return an error later when trying to load the glyph). */
nuclear@0 60 /* */
nuclear@0 61 /* It also checks that fields which must be a multiple of 2, 4, or 8, */
nuclear@0 62 /* don't have incorrect values, etc. */
nuclear@0 63 /* */
nuclear@0 64 /* FT_VALIDATE_PARANOID :: */
nuclear@0 65 /* Only for font debugging. Checks that a table follows the */
nuclear@0 66 /* specification by 100%. Very few fonts will be able to pass this */
nuclear@0 67 /* level anyway but it can be useful for certain tools like font */
nuclear@0 68 /* editors/converters. */
nuclear@0 69 /* */
nuclear@0 70 typedef enum FT_ValidationLevel_
nuclear@0 71 {
nuclear@0 72 FT_VALIDATE_DEFAULT = 0,
nuclear@0 73 FT_VALIDATE_TIGHT,
nuclear@0 74 FT_VALIDATE_PARANOID
nuclear@0 75
nuclear@0 76 } FT_ValidationLevel;
nuclear@0 77
nuclear@0 78
nuclear@0 79 /* validator structure */
nuclear@0 80 typedef struct FT_ValidatorRec_
nuclear@0 81 {
nuclear@0 82 const FT_Byte* base; /* address of table in memory */
nuclear@0 83 const FT_Byte* limit; /* `base' + sizeof(table) in memory */
nuclear@0 84 FT_ValidationLevel level; /* validation level */
nuclear@0 85 FT_Error error; /* error returned. 0 means success */
nuclear@0 86
nuclear@0 87 ft_jmp_buf jump_buffer; /* used for exception handling */
nuclear@0 88
nuclear@0 89 } FT_ValidatorRec;
nuclear@0 90
nuclear@0 91
nuclear@0 92 #define FT_VALIDATOR( x ) ((FT_Validator)( x ))
nuclear@0 93
nuclear@0 94
nuclear@0 95 FT_BASE( void )
nuclear@0 96 ft_validator_init( FT_Validator valid,
nuclear@0 97 const FT_Byte* base,
nuclear@0 98 const FT_Byte* limit,
nuclear@0 99 FT_ValidationLevel level );
nuclear@0 100
nuclear@0 101 /* Do not use this. It's broken and will cause your validator to crash */
nuclear@0 102 /* if you run it on an invalid font. */
nuclear@0 103 FT_BASE( FT_Int )
nuclear@0 104 ft_validator_run( FT_Validator valid );
nuclear@0 105
nuclear@0 106 /* Sets the error field in a validator, then calls `longjmp' to return */
nuclear@0 107 /* to high-level caller. Using `setjmp/longjmp' avoids many stupid */
nuclear@0 108 /* error checks within the validation routines. */
nuclear@0 109 /* */
nuclear@0 110 FT_BASE( void )
nuclear@0 111 ft_validator_error( FT_Validator valid,
nuclear@0 112 FT_Error error );
nuclear@0 113
nuclear@0 114
nuclear@0 115 /* Calls ft_validate_error. Assumes that the `valid' local variable */
nuclear@0 116 /* holds a pointer to the current validator object. */
nuclear@0 117 /* */
nuclear@0 118 /* Use preprocessor prescan to pass FT_ERR_PREFIX. */
nuclear@0 119 /* */
nuclear@0 120 #define FT_INVALID( _prefix, _error ) FT_INVALID_( _prefix, _error )
nuclear@0 121 #define FT_INVALID_( _prefix, _error ) \
nuclear@0 122 ft_validator_error( valid, _prefix ## _error )
nuclear@0 123
nuclear@0 124 /* called when a broken table is detected */
nuclear@0 125 #define FT_INVALID_TOO_SHORT \
nuclear@0 126 FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
nuclear@0 127
nuclear@0 128 /* called when an invalid offset is detected */
nuclear@0 129 #define FT_INVALID_OFFSET \
nuclear@0 130 FT_INVALID( FT_ERR_PREFIX, Invalid_Offset )
nuclear@0 131
nuclear@0 132 /* called when an invalid format/value is detected */
nuclear@0 133 #define FT_INVALID_FORMAT \
nuclear@0 134 FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
nuclear@0 135
nuclear@0 136 /* called when an invalid glyph index is detected */
nuclear@0 137 #define FT_INVALID_GLYPH_ID \
nuclear@0 138 FT_INVALID( FT_ERR_PREFIX, Invalid_Glyph_Index )
nuclear@0 139
nuclear@0 140 /* called when an invalid field value is detected */
nuclear@0 141 #define FT_INVALID_DATA \
nuclear@0 142 FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
nuclear@0 143
nuclear@0 144
nuclear@0 145 FT_END_HEADER
nuclear@0 146
nuclear@0 147 #endif /* __FTVALID_H__ */
nuclear@0 148
nuclear@0 149
nuclear@0 150 /* END */