| Index: third_party/freetype/src/type1/t1load.c
|
| diff --git a/core/src/fxge/fx_freetype/fxft2.5.01/src/type1/t1load.c b/third_party/freetype/src/type1/t1load.c
|
| similarity index 98%
|
| rename from core/src/fxge/fx_freetype/fxft2.5.01/src/type1/t1load.c
|
| rename to third_party/freetype/src/type1/t1load.c
|
| index 661dd075ebce8efb2fb46df5c68ba93624a0af4d..22b3f6b31ddc40587c7952484d08678c6317454a 100644
|
| --- a/core/src/fxge/fx_freetype/fxft2.5.01/src/type1/t1load.c
|
| +++ b/third_party/freetype/src/type1/t1load.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* Type 1 font loader (body). */
|
| /* */
|
| -/* Copyright 1996-2013 by */
|
| +/* Copyright 1996-2014 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -60,12 +60,12 @@
|
| /*************************************************************************/
|
|
|
|
|
| -#include "../../include/ft2build.h"
|
| -#include "../../include/freetype/internal/ftdebug.h"
|
| -#include "../../include/freetype/config/ftconfig.h"
|
| -#include "../../include/freetype/ftmm.h"
|
| -#include "../../include/freetype/internal/t1types.h"
|
| -#include "../../include/freetype/internal/ftcalc.h"
|
| +#include <ft2build.h>
|
| +#include FT_INTERNAL_DEBUG_H
|
| +#include FT_CONFIG_CONFIG_H
|
| +#include FT_MULTIPLE_MASTERS_H
|
| +#include FT_INTERNAL_TYPE1_TYPES_H
|
| +#include FT_INTERNAL_CALC_H
|
|
|
| #include "t1load.h"
|
| #include "t1errors.h"
|
| @@ -377,8 +377,6 @@
|
| if ( blend && blend->num_axis == num_coords )
|
| {
|
| /* recompute the weight vector from the blend coordinates */
|
| - error = FT_Err_Ok;
|
| -
|
| for ( n = 0; n < blend->num_designs; n++ )
|
| {
|
| FT_Fixed result = 0x10000L; /* 1.0 fixed */
|
| @@ -1100,14 +1098,14 @@
|
| FT_Matrix* matrix = &face->type1.font_matrix;
|
| FT_Vector* offset = &face->type1.font_offset;
|
| FT_Face root = (FT_Face)&face->root;
|
| - FT_Fixed temp[6] = {0, 0, 0, 0, 0, 0};
|
| - FT_Fixed temp_scale = 0;
|
| + FT_Fixed temp[6];
|
| + FT_Fixed temp_scale;
|
| FT_Int result;
|
|
|
|
|
| result = T1_ToFixedArray( parser, 6, temp, 3 );
|
|
|
| - if ( result < 0 )
|
| + if ( result < 6 )
|
| {
|
| parser->root.error = FT_THROW( Invalid_File_Format );
|
| return;
|
| @@ -1213,7 +1211,7 @@
|
| char* notdef = (char *)".notdef";
|
|
|
|
|
| - T1_Add_Table( char_table, n, notdef, 8 );
|
| + (void)T1_Add_Table( char_table, n, notdef, 8 );
|
| }
|
|
|
| /* Now we need to read records of the form */
|
| @@ -1274,6 +1272,13 @@
|
| {
|
| charcode = (FT_Int)T1_ToInt( parser );
|
| T1_Skip_Spaces( parser );
|
| +
|
| + /* protect against invalid charcode */
|
| + if ( cur == parser->root.cursor )
|
| + {
|
| + parser->root.error = FT_THROW( Unknown_File_Format );
|
| + return;
|
| + }
|
| }
|
|
|
| cur = parser->root.cursor;
|
| @@ -1591,6 +1596,11 @@
|
| }
|
|
|
| T1_Skip_PS_Token( parser );
|
| + if ( parser->root.cursor >= limit )
|
| + {
|
| + error = FT_THROW( Invalid_File_Format );
|
| + goto Fail;
|
| + }
|
| if ( parser->root.error )
|
| return;
|
|
|
| @@ -1599,7 +1609,7 @@
|
| FT_PtrDist len;
|
|
|
|
|
| - if ( cur + 1 >= limit )
|
| + if ( cur + 2 >= limit )
|
| {
|
| error = FT_THROW( Invalid_File_Format );
|
| goto Fail;
|
| @@ -1610,12 +1620,7 @@
|
|
|
| if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
|
| return;
|
| - /* xhl: Add boundary check here. Fix the bug reported by ifilter. */
|
| - /* TESTDOC: bug# 0018509, 45.pdf. */
|
| - if (base + size >= limit) {
|
| - error = T1_Err_Invalid_File_Format;
|
| - goto Fail;
|
| - }
|
| +
|
| /* for some non-standard fonts like `Optima' which provides */
|
| /* different outlines depending on the resolution it is */
|
| /* possible to get here twice */
|
| @@ -2214,7 +2219,6 @@
|
| if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
|
| {
|
| FT_Int charcode, idx, min_char, max_char;
|
| - FT_Byte* char_name;
|
| FT_Byte* glyph_name;
|
|
|
|
|
| @@ -2229,6 +2233,9 @@
|
| charcode = 0;
|
| for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
|
| {
|
| + FT_Byte* char_name;
|
| +
|
| +
|
| type1->encoding.char_index[charcode] = 0;
|
| type1->encoding.char_name [charcode] = (char *)".notdef";
|
|
|
|
|