ReactOS 0.4.15-dev-7906-g1b85a5f
gxvjust.c
Go to the documentation of this file.
1/***************************************************************************/
2/* */
3/* gxvjust.c */
4/* */
5/* TrueTypeGX/AAT just table validation (body). */
6/* */
7/* Copyright 2005-2018 by */
8/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
9/* David Turner, Robert Wilhelm, and Werner Lemberg. */
10/* */
11/* This file is part of the FreeType project, and may only be used, */
12/* modified, and distributed under the terms of the FreeType project */
13/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
14/* this file you indicate that you have read the license and */
15/* understand and accept it fully. */
16/* */
17/***************************************************************************/
18
19/***************************************************************************/
20/* */
21/* gxvalid is derived from both gxlayout module and otvalid module. */
22/* Development of gxlayout is supported by the Information-technology */
23/* Promotion Agency(IPA), Japan. */
24/* */
25/***************************************************************************/
26
27
28#include "gxvalid.h"
29#include "gxvcommn.h"
30
31#include FT_SFNT_NAMES_H
32
33
34 /*************************************************************************/
35 /* */
36 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
37 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
38 /* messages during execution. */
39 /* */
40#undef FT_COMPONENT
41#define FT_COMPONENT trace_gxvjust
42
43 /*
44 * referred `just' table format specification:
45 * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6just.html
46 * last updated 2000.
47 * ----------------------------------------------
48 * [JUST HEADER]: GXV_JUST_HEADER_SIZE
49 * version (fixed: 32bit) = 0x00010000
50 * format (uint16: 16bit) = 0 is only defined (2000)
51 * horizOffset (uint16: 16bit)
52 * vertOffset (uint16: 16bit)
53 * ----------------------------------------------
54 */
55
56 typedef struct GXV_just_DataRec_
57 {
62
64
65
66#define GXV_JUST_DATA( a ) GXV_TABLE_DATA( just, a )
67
68
69 /* GX just table does not define their subset of GID */
70 static void
72 const FT_String* msg_tag,
73 GXV_Validator gxvalid )
74 {
75 if ( gid < gxvalid->face->num_glyphs )
76 return;
77
78 GXV_TRACE(( "just table includes too large %s"
79 " GID=%d > %d (in maxp)\n",
80 msg_tag, gid, gxvalid->face->num_glyphs ));
82 }
83
84
85 static void
88 GXV_Validator gxvalid )
89 {
91 FT_ULong justClass;
92#ifdef GXV_LOAD_UNUSED_VARS
93 FT_Fixed beforeGrowLimit;
94 FT_Fixed beforeShrinkGrowLimit;
95 FT_Fixed afterGrowLimit;
96 FT_Fixed afterShrinkGrowLimit;
97 FT_UShort growFlags;
98 FT_UShort shrinkFlags;
99#endif
100
101
102 GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 + 4 + 2 + 2 );
103 justClass = FT_NEXT_ULONG( p );
104#ifndef GXV_LOAD_UNUSED_VARS
105 p += 4 + 4 + 4 + 4 + 2 + 2;
106#else
107 beforeGrowLimit = FT_NEXT_ULONG( p );
108 beforeShrinkGrowLimit = FT_NEXT_ULONG( p );
109 afterGrowLimit = FT_NEXT_ULONG( p );
110 afterShrinkGrowLimit = FT_NEXT_ULONG( p );
111 growFlags = FT_NEXT_USHORT( p );
112 shrinkFlags = FT_NEXT_USHORT( p );
113#endif
114
115 /* According to Apple spec, only 7bits in justClass is used */
116 if ( ( justClass & 0xFFFFFF80UL ) != 0 )
117 {
118 GXV_TRACE(( "just table includes non-zero value"
119 " in unused justClass higher bits"
120 " of WidthDeltaPair" ));
122 }
123
124 gxvalid->subtable_length = (FT_ULong)( p - table );
125 }
126
127
128 static void
131 GXV_Validator gxvalid )
132 {
133 FT_Bytes p = table;
135
136
137 GXV_LIMIT_CHECK( 4 );
138 count = FT_NEXT_ULONG( p );
139 for ( i = 0; i < count; i++ )
140 {
141 GXV_TRACE(( "validating wdc pair %d/%d\n", i + 1, count ));
143 p += gxvalid->subtable_length;
144 }
145
146 gxvalid->subtable_length = (FT_ULong)( p - table );
147 }
148
149
150 static void
153 GXV_Validator gxvalid )
154 {
155 FT_Bytes p = table;
156 FT_Bytes wdc_end = table + GXV_JUST_DATA( wdc_offset_max );
157 FT_UInt i;
158
159
160 GXV_NAME_ENTER( "just justDeltaClusters" );
161
162 if ( limit <= wdc_end )
164
165 for ( i = 0; p <= wdc_end; i++ )
166 {
168 p += gxvalid->subtable_length;
169 }
170
171 gxvalid->subtable_length = (FT_ULong)( p - table );
172
173 GXV_EXIT;
174 }
175
176
177 static void
180 GXV_Validator gxvalid )
181 {
182 FT_Bytes p = table;
183
184 FT_Fixed lowerLimit;
185 FT_Fixed upperLimit;
186#ifdef GXV_LOAD_UNUSED_VARS
188#endif
189 FT_UShort decomposedCount;
190
191 FT_UInt i;
192
193
194 GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 );
195 lowerLimit = FT_NEXT_LONG( p );
196 upperLimit = FT_NEXT_LONG( p );
197#ifdef GXV_LOAD_UNUSED_VARS
199#else
200 p += 2;
201#endif
202 decomposedCount = FT_NEXT_USHORT( p );
203
204 if ( lowerLimit >= upperLimit )
205 {
206 GXV_TRACE(( "just table includes invalid range spec:"
207 " lowerLimit(%d) > upperLimit(%d)\n" ));
209 }
210
211 for ( i = 0; i < decomposedCount; i++ )
212 {
214
215
216 GXV_LIMIT_CHECK( 2 );
218 gxv_just_check_max_gid( glyphs, "type0:glyphs", gxvalid );
219 }
220
221 gxvalid->subtable_length = (FT_ULong)( p - table );
222 }
223
224
225 static void
228 GXV_Validator gxvalid )
229 {
230 FT_Bytes p = table;
231 FT_UShort addGlyph;
232
233
234 GXV_LIMIT_CHECK( 2 );
235 addGlyph = FT_NEXT_USHORT( p );
236
237 gxv_just_check_max_gid( addGlyph, "type1:addGlyph", gxvalid );
238
239 gxvalid->subtable_length = (FT_ULong)( p - table );
240 }
241
242
243 static void
246 GXV_Validator gxvalid )
247 {
248 FT_Bytes p = table;
249#ifdef GXV_LOAD_UNUSED_VARS
250 FT_Fixed substThreshhold; /* Apple misspelled "Threshhold" */
251#endif
252 FT_UShort addGlyph;
253 FT_UShort substGlyph;
254
255
256 GXV_LIMIT_CHECK( 4 + 2 + 2 );
257#ifdef GXV_LOAD_UNUSED_VARS
258 substThreshhold = FT_NEXT_ULONG( p );
259#else
260 p += 4;
261#endif
262 addGlyph = FT_NEXT_USHORT( p );
263 substGlyph = FT_NEXT_USHORT( p );
264
265 if ( addGlyph != 0xFFFF )
266 gxv_just_check_max_gid( addGlyph, "type2:addGlyph", gxvalid );
267
268 gxv_just_check_max_gid( substGlyph, "type2:substGlyph", gxvalid );
269
270 gxvalid->subtable_length = (FT_ULong)( p - table );
271 }
272
273
274 static void
277 GXV_Validator gxvalid )
278 {
279 FT_Bytes p = table;
280 FT_ULong variantsAxis;
281 FT_Fixed minimumLimit;
282 FT_Fixed noStretchValue;
283 FT_Fixed maximumLimit;
284
285
286 GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
287 variantsAxis = FT_NEXT_ULONG( p );
288 minimumLimit = FT_NEXT_LONG( p );
289 noStretchValue = FT_NEXT_LONG( p );
290 maximumLimit = FT_NEXT_LONG( p );
291
292 gxvalid->subtable_length = (FT_ULong)( p - table );
293
294 if ( variantsAxis != 0x64756374L ) /* 'duct' */
295 GXV_TRACE(( "variantsAxis 0x%08x is non default value",
296 variantsAxis ));
297
298 if ( minimumLimit > noStretchValue )
299 GXV_TRACE(( "type4:minimumLimit 0x%08x > noStretchValue 0x%08x\n",
300 minimumLimit, noStretchValue ));
301 else if ( noStretchValue > maximumLimit )
302 GXV_TRACE(( "type4:noStretchValue 0x%08x > maximumLimit 0x%08x\n",
303 noStretchValue, maximumLimit ));
304 else if ( !IS_PARANOID_VALIDATION )
305 return;
306
308 }
309
310
311 static void
314 GXV_Validator gxvalid )
315 {
316 FT_Bytes p = table;
318 FT_UShort glyph;
319
320
321 GXV_LIMIT_CHECK( 2 + 2 );
323 glyph = FT_NEXT_USHORT( p );
324
325 if ( flags )
326 GXV_TRACE(( "type5: nonzero value 0x%04x in unused flags\n",
327 flags ));
328 gxv_just_check_max_gid( glyph, "type5:glyph", gxvalid );
329
330 gxvalid->subtable_length = (FT_ULong)( p - table );
331 }
332
333
334 /* parse single actSubrecord */
335 static void
338 GXV_Validator gxvalid )
339 {
340 FT_Bytes p = table;
341 FT_UShort actionClass;
342 FT_UShort actionType;
343 FT_ULong actionLength;
344
345
346 GXV_NAME_ENTER( "just actSubrecord" );
347
348 GXV_LIMIT_CHECK( 2 + 2 + 4 );
349 actionClass = FT_NEXT_USHORT( p );
350 actionType = FT_NEXT_USHORT( p );
351 actionLength = FT_NEXT_ULONG( p );
352
353 /* actionClass is related with justClass using 7bit only */
354 if ( ( actionClass & 0xFF80 ) != 0 )
356
357 if ( actionType == 0 )
359 else if ( actionType == 1 )
361 else if ( actionType == 2 )
363 else if ( actionType == 3 )
364 ; /* Stretch glyph action: no actionData */
365 else if ( actionType == 4 )
367 else if ( actionType == 5 )
369 else
371
372 gxvalid->subtable_length = actionLength;
373
374 GXV_EXIT;
375 }
376
377
378 static void
381 GXV_Validator gxvalid )
382 {
383 FT_Bytes p = table;
384 FT_ULong actionCount;
385 FT_ULong i;
386
387
388 GXV_LIMIT_CHECK( 4 );
389 actionCount = FT_NEXT_ULONG( p );
390 GXV_TRACE(( "actionCount = %d\n", actionCount ));
391
392 for ( i = 0; i < actionCount; i++ )
393 {
395 p += gxvalid->subtable_length;
396 }
397
398 gxvalid->subtable_length = (FT_ULong)( p - table );
399
400 GXV_EXIT;
401 }
402
403
404 static void
406 GXV_LookupValueCPtr value_p,
407 GXV_Validator gxvalid )
408 {
409 FT_UNUSED( glyph );
410
411 if ( value_p->u > GXV_JUST_DATA( pc_offset_max ) )
412 GXV_JUST_DATA( pc_offset_max ) = value_p->u;
413 if ( value_p->u < GXV_JUST_DATA( pc_offset_max ) )
414 GXV_JUST_DATA( pc_offset_min ) = value_p->u;
415 }
416
417
418 static void
421 GXV_Validator gxvalid )
422 {
423 FT_Bytes p = table;
424
425
426 GXV_NAME_ENTER( "just pcLookupTable" );
427 GXV_JUST_DATA( pc_offset_max ) = 0x0000;
428 GXV_JUST_DATA( pc_offset_min ) = 0xFFFFU;
429
432
433 gxv_LookupTable_validate( p, limit, gxvalid );
434
435 /* subtable_length is set by gxv_LookupTable_validate() */
436
437 GXV_EXIT;
438 }
439
440
441 static void
444 GXV_Validator gxvalid )
445 {
446 FT_Bytes p = table;
447
448
449 GXV_NAME_ENTER( "just postcompTable" );
450
452 p += gxvalid->subtable_length;
453
455 p += gxvalid->subtable_length;
456
457 gxvalid->subtable_length = (FT_ULong)( p - table );
458
459 GXV_EXIT;
460 }
461
462
463 static void
467 GXV_StateTable_GlyphOffsetCPtr glyphOffset_p,
470 GXV_Validator gxvalid )
471 {
472#ifdef GXV_LOAD_UNUSED_VARS
473 /* TODO: validate markClass & currentClass */
474 FT_UShort setMark;
475 FT_UShort dontAdvance;
476 FT_UShort markClass;
477 FT_UShort currentClass;
478#endif
479
480 FT_UNUSED( state );
481 FT_UNUSED( glyphOffset_p );
482 FT_UNUSED( table );
483 FT_UNUSED( limit );
484 FT_UNUSED( gxvalid );
485
486#ifndef GXV_LOAD_UNUSED_VARS
487 FT_UNUSED( flags );
488#else
489 setMark = (FT_UShort)( ( flags >> 15 ) & 1 );
490 dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
491 markClass = (FT_UShort)( ( flags >> 7 ) & 0x7F );
492 currentClass = (FT_UShort)( flags & 0x7F );
493#endif
494 }
495
496
497 static void
500 GXV_Validator gxvalid )
501 {
502 FT_Bytes p = table;
504 FT_UShort coverage;
505 FT_ULong subFeatureFlags;
506
507
508 GXV_NAME_ENTER( "just justClassTable" );
509
510 GXV_LIMIT_CHECK( 2 + 2 + 4 );
512 coverage = FT_NEXT_USHORT( p );
513 subFeatureFlags = FT_NEXT_ULONG( p );
514
515 GXV_TRACE(( " justClassTable: coverage = 0x%04x (%s) ", coverage ));
516 if ( ( coverage & 0x4000 ) == 0 )
517 GXV_TRACE(( "ascending\n" ));
518 else
519 GXV_TRACE(( "descending\n" ));
520
521 if ( subFeatureFlags )
522 GXV_TRACE(( " justClassTable: nonzero value (0x%08x)"
523 " in unused subFeatureFlags\n", subFeatureFlags ));
524
525 gxvalid->statetable.optdata = NULL;
531
532 gxv_StateTable_validate( p, table + length, gxvalid );
533
534 /* subtable_length is set by gxv_LookupTable_validate() */
535
536 GXV_EXIT;
537 }
538
539
540 static void
542 GXV_LookupValueCPtr value_p,
543 GXV_Validator gxvalid )
544 {
545 FT_UNUSED( glyph );
546
547 if ( value_p->u > GXV_JUST_DATA( wdc_offset_max ) )
548 GXV_JUST_DATA( wdc_offset_max ) = value_p->u;
549 if ( value_p->u < GXV_JUST_DATA( wdc_offset_min ) )
550 GXV_JUST_DATA( wdc_offset_min ) = value_p->u;
551 }
552
553
554 static void
557 GXV_Validator gxvalid )
558 {
559 FT_Bytes p = table;
560
561
562 GXV_JUST_DATA( wdc_offset_max ) = 0x0000;
563 GXV_JUST_DATA( wdc_offset_min ) = 0xFFFFU;
564
567
568 gxv_LookupTable_validate( p, limit, gxvalid );
569
570 /* subtable_length is set by gxv_LookupTable_validate() */
571
572 GXV_EXIT;
573 }
574
575
576 /*
577 * gxv_just_justData_validate() parses and validates horizData, vertData.
578 */
579 static void
582 GXV_Validator gxvalid )
583 {
584 /*
585 * following 3 offsets are measured from the start of `just'
586 * (which table points to), not justData
587 */
588 FT_UShort justClassTableOffset;
589 FT_UShort wdcTableOffset;
590 FT_UShort pcTableOffset;
591 FT_Bytes p = table;
592
593 GXV_ODTECT( 4, odtect );
594
595
596 GXV_NAME_ENTER( "just justData" );
597
598 GXV_ODTECT_INIT( odtect );
599 GXV_LIMIT_CHECK( 2 + 2 + 2 );
600 justClassTableOffset = FT_NEXT_USHORT( p );
601 wdcTableOffset = FT_NEXT_USHORT( p );
602 pcTableOffset = FT_NEXT_USHORT( p );
603
604 GXV_TRACE(( " (justClassTableOffset = 0x%04x)\n", justClassTableOffset ));
605 GXV_TRACE(( " (wdcTableOffset = 0x%04x)\n", wdcTableOffset ));
606 GXV_TRACE(( " (pcTableOffset = 0x%04x)\n", pcTableOffset ));
607
610 "just_LookupTable", odtect );
611
612 if ( wdcTableOffset )
613 {
615 gxvalid->root->base + wdcTableOffset, limit, gxvalid );
616 gxv_odtect_add_range( gxvalid->root->base + wdcTableOffset,
617 gxvalid->subtable_length, "just_wdcTable", odtect );
618 }
619
620 if ( pcTableOffset )
621 {
622 gxv_just_postcompTable_validate( gxvalid->root->base + pcTableOffset,
623 limit, gxvalid );
624 gxv_odtect_add_range( gxvalid->root->base + pcTableOffset,
625 gxvalid->subtable_length, "just_pcTable", odtect );
626 }
627
628 if ( justClassTableOffset )
629 {
631 gxvalid->root->base + justClassTableOffset, limit, gxvalid );
632 gxv_odtect_add_range( gxvalid->root->base + justClassTableOffset,
633 gxvalid->subtable_length, "just_justClassTable",
634 odtect );
635 }
636
637 gxv_odtect_validate( odtect, gxvalid );
638
639 GXV_EXIT;
640 }
641
642
643 FT_LOCAL_DEF( void )
646 FT_Validator ftvalid )
647 {
648 FT_Bytes p = table;
649 FT_Bytes limit = 0;
650
651 GXV_ValidatorRec gxvalidrec;
652 GXV_Validator gxvalid = &gxvalidrec;
653 GXV_just_DataRec justrec;
654 GXV_just_Data just = &justrec;
655
658 FT_UShort horizOffset;
659 FT_UShort vertOffset;
660
661 GXV_ODTECT( 3, odtect );
662
663
664 GXV_ODTECT_INIT( odtect );
665
666 gxvalid->root = ftvalid;
667 gxvalid->table_data = just;
668 gxvalid->face = face;
669
670 FT_TRACE3(( "validating `just' table\n" ));
671 GXV_INIT;
672
673 limit = gxvalid->root->limit;
674
675 GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 );
678 horizOffset = FT_NEXT_USHORT( p );
679 vertOffset = FT_NEXT_USHORT( p );
681 "just header", odtect );
682
683
684 /* Version 1.0 (always:2000) */
685 GXV_TRACE(( " (version = 0x%08x)\n", version ));
686 if ( version != 0x00010000UL )
688
689 /* format 0 (always:2000) */
690 GXV_TRACE(( " (format = 0x%04x)\n", format ));
691 if ( format != 0x0000 )
693
694 GXV_TRACE(( " (horizOffset = %d)\n", horizOffset ));
695 GXV_TRACE(( " (vertOffset = %d)\n", vertOffset ));
696
697
698 /* validate justData */
699 if ( 0 < horizOffset )
700 {
701 gxv_just_justData_validate( table + horizOffset, limit, gxvalid );
702 gxv_odtect_add_range( table + horizOffset, gxvalid->subtable_length,
703 "horizJustData", odtect );
704 }
705
706 if ( 0 < vertOffset )
707 {
708 gxv_just_justData_validate( table + vertOffset, limit, gxvalid );
709 gxv_odtect_add_range( table + vertOffset, gxvalid->subtable_length,
710 "vertJustData", odtect );
711 }
712
713 gxv_odtect_validate( odtect, gxvalid );
714
715 FT_TRACE4(( "\n" ));
716 }
717
718
719/* END */
static int state
Definition: maze.c:121
#define NULL
Definition: types.h:112
WORD face[3]
Definition: mesh.c:4747
static const WCHAR version[]
Definition: asmname.c:66
#define FT_LOCAL_DEF(x)
Definition: ftconfig.h:388
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
#define FT_TRACE3(varformat)
Definition: ftdebug.h:160
#define FT_TRACE4(varformat)
Definition: ftdebug.h:161
#define FT_NEXT_USHORT(buffer)
Definition: ftstream.h:226
#define FT_NEXT_LONG(buffer)
Definition: ftstream.h:235
#define FT_NEXT_ULONG(buffer)
Definition: ftstream.h:238
unsigned long FT_ULong
Definition: fttypes.h:253
unsigned char FT_Byte
Definition: fttypes.h:154
signed long FT_Fixed
Definition: fttypes.h:288
unsigned short FT_UShort
Definition: fttypes.h:209
char FT_String
Definition: fttypes.h:187
unsigned int FT_UInt
Definition: fttypes.h:231
const FT_Byte * FT_Bytes
Definition: fttypes.h:165
#define FT_INVALID_FORMAT
Definition: ftvalid.h:142
#define FT_INVALID_OFFSET
Definition: ftvalid.h:138
#define FT_INVALID_DATA
Definition: ftvalid.h:150
typedefFT_BEGIN_HEADER struct FT_ValidatorRec_ volatile * FT_Validator
Definition: ftvalid.h:42
#define FT_INVALID_GLYPH_ID
Definition: ftvalid.h:146
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLint limit
Definition: glext.h:10326
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLfloat GLfloat p
Definition: glext.h:8902
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
gxv_StateTable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvcommn.c:1208
gxv_LookupTable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvcommn.c:755
gxv_odtect_add_range(FT_Bytes start, FT_ULong length, const FT_String *name, GXV_odtect_Range odtect)
Definition: gxvcommn.c:1702
gxv_odtect_validate(GXV_odtect_Range odtect, GXV_Validator gxvalid)
Definition: gxvcommn.c:1715
#define GXV_ODTECT(n, odtect)
Definition: gxvcommn.h:562
#define GXV_NAME_ENTER(name)
Definition: gxvcommn.h:301
#define GXV_SET_ERR_IF_PARANOID(err)
Definition: gxvcommn.h:66
#define GXV_ODTECT_INIT(odtect)
Definition: gxvcommn.h:567
@ GXV_LOOKUPVALUE_UNSIGNED
Definition: gxvcommn.h:100
#define GXV_TRACE(s)
Definition: gxvcommn.h:304
#define GXV_INIT
Definition: gxvcommn.h:300
@ GXV_GLYPHOFFSET_NONE
Definition: gxvcommn.h:122
#define IS_PARANOID_VALIDATION
Definition: gxvcommn.h:65
#define GXV_EXIT
Definition: gxvcommn.h:302
#define GXV_LIMIT_CHECK(_count)
Definition: gxvcommn.h:272
static void gxv_just_justData_lookuptable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:555
#define GXV_JUST_DATA(a)
Definition: gxvjust.c:66
static void gxv_just_check_max_gid(FT_UShort gid, const FT_String *msg_tag, GXV_Validator gxvalid)
Definition: gxvjust.c:71
struct GXV_just_DataRec_ GXV_just_DataRec
static void gxv_just_actSubrecord_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:336
struct GXV_just_DataRec_ * GXV_just_Data
static void gxv_just_pcLookupTable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:419
static void gxv_just_wdcTable_LookupValue_validate(FT_UShort glyph, GXV_LookupValueCPtr value_p, GXV_Validator gxvalid)
Definition: gxvjust.c:541
static void gxv_just_actSubrecord_type2_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:244
static void gxv_just_classTable_entry_validate(FT_Byte state, FT_UShort flags, GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:464
static void gxv_just_actSubrecord_type1_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:226
gxv_just_validate(FT_Bytes table, FT_Face face, FT_Validator ftvalid)
Definition: gxvjust.c:644
static void gxv_just_actSubrecord_type0_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:178
static void gxv_just_justData_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:580
static void gxv_just_pcActionRecord_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:379
static void gxv_just_wdc_entry_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:129
static void gxv_just_widthDeltaClusters_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:151
static void gxv_just_actSubrecord_type4_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:275
static void gxv_just_postcompTable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:442
static void gxv_just_pcTable_LookupValue_entry_validate(FT_UShort glyph, GXV_LookupValueCPtr value_p, GXV_Validator gxvalid)
Definition: gxvjust.c:405
static void gxv_just_wdp_entry_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:86
static void gxv_just_actSubrecord_type5_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:312
static void gxv_just_justClassTable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvjust.c:498
static UINT UINT LPWORD glyphs
Definition: font.c:44
FT_Long num_glyphs
Definition: freetype.h:1076
GXV_StateTable_Entry_Validate_Func entry_validate_func
Definition: gxvcommn.h:185
GXV_StateTable_Subtable_Setup_Func subtable_setup_func
Definition: gxvcommn.h:184
GXV_GlyphOffset_Format entry_glyphoffset_fmt
Definition: gxvcommn.h:181
GXV_StateTable_OptData_Load_Func optdata_load_func
Definition: gxvcommn.h:186
GXV_StateTable_ValidatorRec statetable
Definition: gxvcommn.h:254
FT_Validator root
Definition: gxvcommn.h:239
void * table_data
Definition: gxvcommn.h:242
FT_ULong subtable_length
Definition: gxvcommn.h:244
GXV_Lookup_Value_Validate_Func lookupval_func
Definition: gxvcommn.h:247
GXV_LookupValue_SignSpec lookupval_sign
Definition: gxvcommn.h:246
FT_UShort wdc_offset_min
Definition: gxvjust.c:59
FT_UShort wdc_offset_max
Definition: gxvjust.c:58
FT_UShort pc_offset_max
Definition: gxvjust.c:60
FT_UShort pc_offset_min
Definition: gxvjust.c:61