| Index: third_party/freetype/src/cid/cidparse.c
|
| diff --git a/third_party/freetype/src/cid/cidparse.c b/third_party/freetype/src/cid/cidparse.c
|
| index d8476cdae8987392df41e9d726367357644710a8..c276949779b1c5f676fb83289e1b78c3be6da758 100644
|
| --- a/third_party/freetype/src/cid/cidparse.c
|
| +++ b/third_party/freetype/src/cid/cidparse.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* CID-keyed Type1 parser (body). */
|
| /* */
|
| -/* Copyright 1996-2007, 2009, 2013, 2014 by */
|
| +/* Copyright 1996-2015 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -86,13 +86,13 @@
|
| /* `StartData' or `/sfnts' */
|
| {
|
| FT_Byte buffer[256 + 10];
|
| - FT_Long read_len = 256 + 10; /* same as signed FT_Stream->size */
|
| + FT_ULong read_len = 256 + 10;
|
| FT_Byte* p = buffer;
|
|
|
|
|
| for ( offset = FT_STREAM_POS(); ; offset += 256 )
|
| {
|
| - FT_Long stream_len; /* same as signed FT_Stream->size */
|
| + FT_ULong stream_len;
|
|
|
|
|
| stream_len = stream->size - FT_STREAM_POS();
|
| @@ -176,7 +176,18 @@
|
| if ( cur[0] == 'S' && ft_strncmp( (char*)cur, "StartData", 9 ) == 0 )
|
| {
|
| if ( ft_strncmp( (char*)arg1, "(Hex)", 5 ) == 0 )
|
| - parser->binary_length = ft_atol( (const char *)arg2 );
|
| + {
|
| + FT_Long tmp = ft_atol( (const char *)arg2 );
|
| +
|
| +
|
| + if ( tmp < 0 )
|
| + {
|
| + FT_ERROR(( "cid_parser_new: invalid length of hex data\n" ));
|
| + error = FT_THROW( Invalid_File_Format );
|
| + }
|
| + else
|
| + parser->binary_length = (FT_ULong)tmp;
|
| + }
|
|
|
| goto Exit;
|
| }
|
|
|