forked from rpms/freetype
89 lines
2.6 KiB
Diff
89 lines
2.6 KiB
Diff
--- a/src/type1/t1load.c
|
|
+++ b/src/type1/t1load.c
|
|
@@ -71,6 +71,13 @@
|
|
#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 */
|
|
@@ -1030,7 +1037,8 @@
|
|
static int
|
|
read_binary_data( T1_Parser parser,
|
|
FT_Long* size,
|
|
- FT_Byte** base )
|
|
+ FT_Byte** base,
|
|
+ FT_Bool incremental )
|
|
{
|
|
FT_Byte* cur;
|
|
FT_Byte* limit = parser->root.limit;
|
|
@@ -1065,8 +1073,12 @@
|
|
}
|
|
}
|
|
|
|
- FT_ERROR(( "read_binary_data: invalid size field\n" ));
|
|
- parser->root.error = T1_Err_Invalid_File_Format;
|
|
+ if( !incremental )
|
|
+ {
|
|
+ FT_ERROR(( "read_binary_data: invalid size field\n" ));
|
|
+ parser->root.error = T1_Err_Invalid_File_Format;
|
|
+ }
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
@@ -1396,7 +1408,7 @@
|
|
|
|
idx = T1_ToInt( parser );
|
|
|
|
- if ( !read_binary_data( parser, &size, &base ) )
|
|
+ if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
|
|
return;
|
|
|
|
/* The binary string is followed by one token, e.g. `NP' */
|
|
@@ -1582,7 +1594,7 @@
|
|
cur++; /* skip `/' */
|
|
len = parser->root.cursor - cur;
|
|
|
|
- if ( !read_binary_data( parser, &size, &base ) )
|
|
+ if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
|
|
return;
|
|
|
|
/* for some non-standard fonts like `Optima' which provides */
|
|
@@ -1871,7 +1883,7 @@
|
|
|
|
|
|
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;
|
|
have_integer = 0;
|
|
}
|
|
@@ -1884,7 +1896,7 @@
|
|
|
|
|
|
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;
|
|
have_integer = 0;
|
|
}
|
|
@@ -2160,9 +2172,7 @@
|
|
type1->subrs_len = loader.subrs.lengths;
|
|
}
|
|
|
|
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
|
|
- if ( !face->root.internal->incremental_interface )
|
|
-#endif
|
|
+ if ( !IS_INCREMENTAL )
|
|
if ( !loader.charstrings.init )
|
|
{
|
|
FT_ERROR(( "T1_Open_Face: no `/CharStrings' array in face\n" ));
|