Fix freetype-2.4.9 regression that caused ghostscript to barf with
"Font Renderer Plugin" errors. Patches come from upstream. References: http://bugs.ghostscript.com/show_bug.cgi?id=692940 https://savannah.nongnu.org/bugs/?func=detailitem&item_id=35833 https://savannah.nongnu.org/bugs/?func=detailitem&item_id=35847 http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=9a55cb7a http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=b43e0f44 ok matthieu@
This commit is contained in:
parent
dcfe652e93
commit
9d886fc06a
@ -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" ));
|
||||||
|
Loading…
Reference in New Issue
Block a user