| Index: third_party/freetype/src/psaux/afmparse.c
|
| diff --git a/third_party/freetype/src/psaux/afmparse.c b/third_party/freetype/src/psaux/afmparse.c
|
| index 6a40e110dc69915a1daf4033af23d7527c7ee541..3ad44ec7240fe4c376daeee1f3ce79c6440c2636 100644
|
| --- a/third_party/freetype/src/psaux/afmparse.c
|
| +++ b/third_party/freetype/src/psaux/afmparse.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* AFM parser (body). */
|
| /* */
|
| -/* Copyright 2006-2010, 2012, 2013 by */
|
| +/* Copyright 2006-2015 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -75,8 +75,8 @@
|
| #define AFM_STREAM_KEY_BEGIN( stream ) \
|
| (char*)( (stream)->cursor - 1 )
|
|
|
| -#define AFM_STREAM_KEY_LEN( stream, key ) \
|
| - ( (char*)(stream)->cursor - key - 1 )
|
| +#define AFM_STREAM_KEY_LEN( stream, key ) \
|
| + (FT_Offset)( (char*)(stream)->cursor - key - 1 )
|
|
|
| #define AFM_STATUS_EOC( stream ) \
|
| ( (stream)->status >= AFM_STREAM_STATUS_EOC )
|
| @@ -369,11 +369,11 @@
|
| FT_LOCAL_DEF( FT_Int )
|
| afm_parser_read_vals( AFM_Parser parser,
|
| AFM_Value vals,
|
| - FT_UInt n )
|
| + FT_Int n )
|
| {
|
| AFM_Stream stream = parser->stream;
|
| char* str;
|
| - FT_UInt i;
|
| + FT_Int i;
|
|
|
|
|
| if ( n > AFM_MAX_ARGUMENTS )
|
| @@ -446,7 +446,7 @@
|
| FT_Offset* len )
|
| {
|
| AFM_Stream stream = parser->stream;
|
| - char* key = 0; /* make stupid compiler happy */
|
| + char* key = NULL; /* make stupid compiler happy */
|
|
|
|
|
| if ( line )
|
| @@ -562,7 +562,7 @@
|
| }
|
|
|
|
|
| - FT_LOCAL_DEF( FT_Error )
|
| + static FT_Error
|
| afm_parser_read_int( AFM_Parser parser,
|
| FT_Int* aint )
|
| {
|
| @@ -590,11 +590,17 @@
|
| char* key;
|
| FT_Offset len;
|
| int n = -1;
|
| + FT_Int tmp;
|
|
|
|
|
| - if ( afm_parser_read_int( parser, &fi->NumTrackKern ) )
|
| + if ( afm_parser_read_int( parser, &tmp ) )
|
| goto Fail;
|
|
|
| + if ( tmp < 0 )
|
| + goto Fail;
|
| +
|
| + fi->NumTrackKern = (FT_UInt)tmp;
|
| +
|
| if ( fi->NumTrackKern )
|
| {
|
| FT_Memory memory = parser->memory;
|
| @@ -615,7 +621,7 @@
|
| case AFM_TOKEN_TRACKKERN:
|
| n++;
|
|
|
| - if ( n >= fi->NumTrackKern )
|
| + if ( n >= (int)fi->NumTrackKern )
|
| goto Fail;
|
|
|
| tk = fi->TrackKerns + n;
|
| @@ -639,7 +645,7 @@
|
| case AFM_TOKEN_ENDTRACKKERN:
|
| case AFM_TOKEN_ENDKERNDATA:
|
| case AFM_TOKEN_ENDFONTMETRICS:
|
| - fi->NumTrackKern = n + 1;
|
| + fi->NumTrackKern = (FT_UInt)( n + 1 );
|
| return FT_Err_Ok;
|
|
|
| case AFM_TOKEN_UNKNOWN:
|
| @@ -688,11 +694,17 @@
|
| char* key;
|
| FT_Offset len;
|
| int n = -1;
|
| + FT_Int tmp;
|
| +
|
|
|
| + if ( afm_parser_read_int( parser, &tmp ) )
|
| + goto Fail;
|
|
|
| - if ( afm_parser_read_int( parser, &fi->NumKernPair ) )
|
| + if ( tmp < 0 )
|
| goto Fail;
|
|
|
| + fi->NumKernPair = (FT_UInt)tmp;
|
| +
|
| if ( fi->NumKernPair )
|
| {
|
| FT_Memory memory = parser->memory;
|
| @@ -720,7 +732,7 @@
|
|
|
| n++;
|
|
|
| - if ( n >= fi->NumKernPair )
|
| + if ( n >= (int)fi->NumKernPair )
|
| goto Fail;
|
|
|
| kp = fi->KernPairs + n;
|
| @@ -733,8 +745,9 @@
|
| if ( r < 3 )
|
| goto Fail;
|
|
|
| - kp->index1 = shared_vals[0].u.i;
|
| - kp->index2 = shared_vals[1].u.i;
|
| + /* index values can't be negative */
|
| + kp->index1 = shared_vals[0].u.u;
|
| + kp->index2 = shared_vals[1].u.u;
|
| if ( token == AFM_TOKEN_KPY )
|
| {
|
| kp->x = 0;
|
| @@ -752,7 +765,7 @@
|
| case AFM_TOKEN_ENDKERNPAIRS:
|
| case AFM_TOKEN_ENDKERNDATA:
|
| case AFM_TOKEN_ENDFONTMETRICS:
|
| - fi->NumKernPair = n + 1;
|
| + fi->NumKernPair = (FT_UInt)( n + 1 );
|
| ft_qsort( fi->KernPairs, fi->NumKernPair,
|
| sizeof ( AFM_KernPairRec ),
|
| afm_compare_kern_pairs );
|
| @@ -815,7 +828,7 @@
|
|
|
| static FT_Error
|
| afm_parser_skip_section( AFM_Parser parser,
|
| - FT_UInt n,
|
| + FT_Int n,
|
| AFM_Token end_section )
|
| {
|
| char* key;
|
|
|