Fix Savannah bug #35833.

Based on the patch given in the bug report.

* src/type1/t1load.c (IS_INCREMENTAL): New macro.
(read_binary_data): Add parameter `incremental'.
Update all callers using `IS_INCREMENTAL'.
This commit is contained in:
Werner Lemberg 2012-03-14 14:40:03 +01:00
parent cbe9029203
commit 9a55cb7a71
2 changed files with 30 additions and 10 deletions

View File

@ -1,3 +1,13 @@
2012-03-14 Werner Lemberg <wl@gnu.org>
Fix Savannah bug #35833.
Based on the patch given in the bug report.
* src/type1/t1load.c (IS_INCREMENTAL): New macro.
(read_binary_data): Add parameter `incremental'.
Update all callers using `IS_INCREMENTAL'.
2012-03-11 Werner Lemberg <wl@gnu.org>
[autofit] Return correct linear advance width values.

View File

@ -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" ));