Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: third_party/freetype/src/sfnt/ttpost.c

Issue 1413673003: Update bundled freetype to 2.6.1 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: DEPS for corpus Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/freetype/src/sfnt/ttpost.h ('k') | third_party/freetype/src/sfnt/ttsbit.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /***************************************************************************/ 1 /***************************************************************************/
2 /* */ 2 /* */
3 /* ttpost.c */ 3 /* ttpost.c */
4 /* */ 4 /* */
5 /* Postcript name table processing for TrueType and OpenType fonts */ 5 /* Postcript name table processing for TrueType and OpenType fonts */
6 /* (body). */ 6 /* (body). */
7 /* */ 7 /* */
8 /* Copyright 1996-2003, 2006-2010, 2013, 2014 by */ 8 /* Copyright 1996-2015 by */
9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
10 /* */ 10 /* */
11 /* This file is part of the FreeType project, and may only be used, */ 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 */ 12 /* modified, and distributed under the terms of the FreeType project */
13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
14 /* this file you indicate that you have read the license and */ 14 /* this file you indicate that you have read the license and */
15 /* understand and accept it fully. */ 15 /* understand and accept it fully. */
16 /* */ 16 /* */
17 /***************************************************************************/ 17 /***************************************************************************/
18 18
(...skipping 26 matching lines...) Expand all
45 45
46 46
47 /* If this configuration macro is defined, we rely on the `PSNames' */ 47 /* If this configuration macro is defined, we rely on the `PSNames' */
48 /* module to grab the glyph names. */ 48 /* module to grab the glyph names. */
49 49
50 #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES 50 #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
51 51
52 52
53 #include FT_SERVICE_POSTSCRIPT_CMAPS_H 53 #include FT_SERVICE_POSTSCRIPT_CMAPS_H
54 54
55 #define MAC_NAME( x ) ( (FT_String*)psnames->macintosh_name( x ) ) 55 #define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) )
56 56
57 57
58 #else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ 58 #else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
59 59
60 60
61 /* Otherwise, we ignore the `PSNames' module, and provide our own */ 61 /* Otherwise, we ignore the `PSNames' module, and provide our own */
62 /* table of Mac names. Thus, it is possible to build a version of */ 62 /* table of Mac names. Thus, it is possible to build a version of */
63 /* FreeType without the Type 1 driver & PSNames module. */ 63 /* FreeType without the Type 1 driver & PSNames module. */
64 64
65 #define MAC_NAME( x ) ( (FT_String*)tt_post_default_names[x] ) 65 #define MAC_NAME( x ) (FT_String*)tt_post_default_names[x]
66 66
67 /* the 258 default Mac PS glyph names; see file `tools/glnames.py' */ 67 /* the 258 default Mac PS glyph names; see file `tools/glnames.py' */
68 68
69 static const FT_String* const tt_post_default_names[258] = 69 static const FT_String* const tt_post_default_names[258] =
70 { 70 {
71 /* 0 */ 71 /* 0 */
72 ".notdef", ".null", "nonmarkingreturn", "space", "exclam", 72 ".notdef", ".null", "nonmarkingreturn", "space", "exclam",
73 "quotedbl", "numbersign", "dollar", "percent", "ampersand", 73 "quotedbl", "numbersign", "dollar", "percent", "ampersand",
74 /* 10 */ 74 /* 10 */
75 "quotesingle", "parenleft", "parenright", "asterisk", "plus", 75 "quotesingle", "parenleft", "parenright", "asterisk", "plus",
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 "Ccaron", "ccaron", "dcroat", 148 "Ccaron", "ccaron", "dcroat",
149 }; 149 };
150 150
151 151
152 #endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ 152 #endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
153 153
154 154
155 static FT_Error 155 static FT_Error
156 load_format_20( TT_Face face, 156 load_format_20( TT_Face face,
157 FT_Stream stream, 157 FT_Stream stream,
158 FT_Long post_limit ) 158 FT_ULong post_limit )
159 { 159 {
160 FT_Memory memory = stream->memory; 160 FT_Memory memory = stream->memory;
161 FT_Error error; 161 FT_Error error;
162 162
163 FT_Int num_glyphs; 163 FT_Int num_glyphs;
164 FT_UShort num_names; 164 FT_UShort num_names;
165 165
166 FT_UShort* glyph_indices = 0; 166 FT_UShort* glyph_indices = NULL;
167 FT_Char** name_strings = 0; 167 FT_Char** name_strings = NULL;
168 168
169 169
170 if ( FT_READ_USHORT( num_glyphs ) ) 170 if ( FT_READ_USHORT( num_glyphs ) )
171 goto Exit; 171 goto Exit;
172 172
173 /* UNDOCUMENTED! The number of glyphs in this table can be smaller */ 173 /* UNDOCUMENTED! The number of glyphs in this table can be smaller */
174 /* than the value in the maxp table (cf. cyberbit.ttf). */ 174 /* than the value in the maxp table (cf. cyberbit.ttf). */
175 175
176 /* There already exist fonts which have more than 32768 glyph names */ 176 /* There already exist fonts which have more than 32768 glyph names */
177 /* in this table, so the test for this threshold has been dropped. */ 177 /* in this table, so the test for this threshold has been dropped. */
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 break; 236 break;
237 else 237 else
238 { 238 {
239 FT_TRACE6(( "load_format_20: %d byte left in post table\n", 239 FT_TRACE6(( "load_format_20: %d byte left in post table\n",
240 post_limit - FT_STREAM_POS() )); 240 post_limit - FT_STREAM_POS() ));
241 241
242 if ( FT_READ_BYTE( len ) ) 242 if ( FT_READ_BYTE( len ) )
243 goto Fail1; 243 goto Fail1;
244 } 244 }
245 245
246 if ( (FT_Int)len > post_limit || 246 if ( len > post_limit ||
247 FT_STREAM_POS() > post_limit - (FT_Int)len ) 247 FT_STREAM_POS() > post_limit - len )
248 { 248 {
249 FT_Int d = (FT_Int)post_limit - (FT_Int)FT_STREAM_POS();
250
251
249 FT_ERROR(( "load_format_20:" 252 FT_ERROR(( "load_format_20:"
250 " exceeding string length (%d)," 253 " exceeding string length (%d),"
251 " truncating at end of post table (%d byte left)\n", 254 " truncating at end of post table (%d byte left)\n",
252 len, post_limit - FT_STREAM_POS() )); 255 len, d ));
253 len = FT_MAX( 0, post_limit - FT_STREAM_POS() ); 256 len = (FT_UInt)FT_MAX( 0, d );
254 } 257 }
255 258
256 if ( FT_NEW_ARRAY( name_strings[n], len + 1 ) || 259 if ( FT_NEW_ARRAY( name_strings[n], len + 1 ) ||
257 FT_STREAM_READ( name_strings[n], len ) ) 260 FT_STREAM_READ( name_strings[n], len ) )
258 goto Fail1; 261 goto Fail1;
259 262
260 name_strings[n][len] = '\0'; 263 name_strings[n][len] = '\0';
261 } 264 }
262 265
263 if ( n < num_names ) 266 if ( n < num_names )
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 FT_FREE( glyph_indices ); 303 FT_FREE( glyph_indices );
301 304
302 Exit: 305 Exit:
303 return error; 306 return error;
304 } 307 }
305 308
306 309
307 static FT_Error 310 static FT_Error
308 load_format_25( TT_Face face, 311 load_format_25( TT_Face face,
309 FT_Stream stream, 312 FT_Stream stream,
310 FT_Long post_limit ) 313 FT_ULong post_limit )
311 { 314 {
312 FT_Memory memory = stream->memory; 315 FT_Memory memory = stream->memory;
313 FT_Error error; 316 FT_Error error;
314 317
315 FT_Int num_glyphs; 318 FT_Int num_glyphs;
316 FT_Char* offset_table = 0; 319 FT_Char* offset_table = NULL;
317 320
318 FT_UNUSED( post_limit ); 321 FT_UNUSED( post_limit );
319 322
320 323
321 /* UNDOCUMENTED! This value appears only in the Apple TT specs. */ 324 /* UNDOCUMENTED! This value appears only in the Apple TT specs. */
322 if ( FT_READ_USHORT( num_glyphs ) ) 325 if ( FT_READ_USHORT( num_glyphs ) )
323 goto Exit; 326 goto Exit;
324 327
325 /* check the number of glyphs */ 328 /* check the number of glyphs */
326 if ( num_glyphs > face->max_profile.numGlyphs || num_glyphs > 258 ) 329 if ( num_glyphs > face->max_profile.numGlyphs || num_glyphs > 258 )
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 } 373 }
371 374
372 375
373 static FT_Error 376 static FT_Error
374 load_post_names( TT_Face face ) 377 load_post_names( TT_Face face )
375 { 378 {
376 FT_Stream stream; 379 FT_Stream stream;
377 FT_Error error; 380 FT_Error error;
378 FT_Fixed format; 381 FT_Fixed format;
379 FT_ULong post_len; 382 FT_ULong post_len;
380 FT_Long post_limit; 383 FT_ULong post_limit;
381 384
382 385
383 /* get a stream for the face's resource */ 386 /* get a stream for the face's resource */
384 stream = face->root.stream; 387 stream = face->root.stream;
385 388
386 /* seek to the beginning of the PS names table */ 389 /* seek to the beginning of the PS names table */
387 error = face->goto_table( face, TTAG_post, stream, &post_len ); 390 error = face->goto_table( face, TTAG_post, stream, &post_len );
388 if ( error ) 391 if ( error )
389 goto Exit; 392 goto Exit;
390 393
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 543
541 544
542 if ( !names->loaded ) 545 if ( !names->loaded )
543 { 546 {
544 error = load_post_names( face ); 547 error = load_post_names( face );
545 if ( error ) 548 if ( error )
546 goto End; 549 goto End;
547 } 550 }
548 551
549 if ( idx < (FT_UInt)table->num_glyphs ) /* paranoid checking */ 552 if ( idx < (FT_UInt)table->num_glyphs ) /* paranoid checking */
550 { 553 *PSname = MAC_NAME( (FT_Int)idx + table->offsets[idx] );
551 idx += table->offsets[idx];
552 *PSname = MAC_NAME( idx );
553 }
554 } 554 }
555 555
556 /* nothing to do for format == 0x00030000L */ 556 /* nothing to do for format == 0x00030000L */
557 557
558 End: 558 End:
559 return FT_Err_Ok; 559 return FT_Err_Ok;
560 } 560 }
561 561
562 562
563 /* END */ 563 /* END */
OLDNEW
« no previous file with comments | « third_party/freetype/src/sfnt/ttpost.h ('k') | third_party/freetype/src/sfnt/ttsbit.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698