dcoppa 2012-05-11 20:02:28 +00:00
parent dcfe652e93
commit 9d886fc06a

View File

@ -71,6 +71,13 @@
#include "t1errors.h" #include "t1errors.h"
#ifdef FT_CONFIG_OPTION_INCREMENTAL
#define IS_INCREMENTAL ( face->root.internal->incremental_interface != 0 )
#else
#define IS_INCREMENTAL 0
#endif
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
@ -1030,7 +1037,8 @@
static int static int
read_binary_data( T1_Parser parser, read_binary_data( T1_Parser parser,
FT_Long* size, FT_Long* size,
FT_Byte** base ) FT_Byte** base,
FT_Bool incremental )
{ {
FT_Byte* cur; FT_Byte* cur;
FT_Byte* limit = parser->root.limit; FT_Byte* limit = parser->root.limit;
@ -1065,8 +1073,12 @@
} }
} }
FT_ERROR(( "read_binary_data: invalid size field\n" )); if( !incremental )
parser->root.error = T1_Err_Invalid_File_Format; {
FT_ERROR(( "read_binary_data: invalid size field\n" ));
parser->root.error = T1_Err_Invalid_File_Format;
}
return 0; return 0;
} }
@ -1387,16 +1399,17 @@
FT_Byte* base; FT_Byte* base;
/* If the next token isn't `dup' we are done. */ /* If we are out of data, or if the next token isn't `dup', */
if ( parser->root.cursor + 4 < parser->root.limit && /* we are done. */
ft_strncmp( (char*)parser->root.cursor, "dup", 3 ) != 0 ) if ( parser->root.cursor + 4 >= parser->root.limit ||
ft_strncmp( (char*)parser->root.cursor, "dup", 3 ) != 0 )
break; break;
T1_Skip_PS_Token( parser ); /* `dup' */ T1_Skip_PS_Token( parser ); /* `dup' */
idx = T1_ToInt( parser ); idx = T1_ToInt( parser );
if ( !read_binary_data( parser, &size, &base ) ) if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
return; return;
/* The binary string is followed by one token, e.g. `NP' */ /* The binary string is followed by one token, e.g. `NP' */
@ -1582,7 +1595,7 @@
cur++; /* skip `/' */ cur++; /* skip `/' */
len = parser->root.cursor - cur; len = parser->root.cursor - cur;
if ( !read_binary_data( parser, &size, &base ) ) if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
return; return;
/* for some non-standard fonts like `Optima' which provides */ /* for some non-standard fonts like `Optima' which provides */
@ -1871,7 +1884,7 @@
parser->root.cursor = start_binary; parser->root.cursor = start_binary;
if ( !read_binary_data( parser, &s, &b ) ) if ( !read_binary_data( parser, &s, &b, IS_INCREMENTAL ) )
return T1_Err_Invalid_File_Format; return T1_Err_Invalid_File_Format;
have_integer = 0; have_integer = 0;
} }
@ -1884,7 +1897,7 @@
parser->root.cursor = start_binary; parser->root.cursor = start_binary;
if ( !read_binary_data( parser, &s, &b ) ) if ( !read_binary_data( parser, &s, &b, IS_INCREMENTAL ) )
return T1_Err_Invalid_File_Format; return T1_Err_Invalid_File_Format;
have_integer = 0; have_integer = 0;
} }
@ -2160,9 +2173,7 @@
type1->subrs_len = loader.subrs.lengths; type1->subrs_len = loader.subrs.lengths;
} }
#ifdef FT_CONFIG_OPTION_INCREMENTAL if ( !IS_INCREMENTAL )
if ( !face->root.internal->incremental_interface )
#endif
if ( !loader.charstrings.init ) if ( !loader.charstrings.init )
{ {
FT_ERROR(( "T1_Open_Face: no `/CharStrings' array in face\n" )); FT_ERROR(( "T1_Open_Face: no `/CharStrings' array in face\n" ));