From 6cb2faa845f3841f2b5281b42e22e5a450cd9fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suzuki=2C=20Toshiya=20=28=E9=88=B4=E6=9C=A8=E4=BF=8A?= =?UTF-8?q?=E5=93=89=29?= Date: Thu, 21 Feb 2008 18:46:07 +0000 Subject: [PATCH] * src/base/ftmac.c: Fix a bug of PostScript font name synthesis in parse_fond(). --- ChangeLog | 11 +++++++++++ builds/mac/ftmac.c | 9 +++++++-- src/base/ftmac.c | 9 +++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 48d935854..3e10c999b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-02-21 suzuki toshiya + + * src/base/ftmac.c: Fix a bug of PostScript font name synthesis + in parse_fond(). For any face of a specified FOND, always the + name for the first face was used. Except of a FOND that refers + multiple Type1 font files, wrong synthesized font names are not + used at all, so this is invisible bug. A few limit checks are + added to parse_fond(). + + * builds/mac/ftmac.c: Ditto. + 2008-02-21 suzuki toshiya * builds/unix/configure.raw: Split compiler option to link Carbon diff --git a/builds/mac/ftmac.c b/builds/mac/ftmac.c index b0b79ea1e..e5e296446 100644 --- a/builds/mac/ftmac.c +++ b/builds/mac/ftmac.c @@ -727,6 +727,10 @@ typedef short ResourceIndex; assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 ); base_assoc = assoc; + /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */ + if ( 47 < face_index ) + return; + /* Let's do a little range checking before we get too excited here */ if ( face_index < count_faces_sfnt( fond_data ) ) { @@ -778,9 +782,10 @@ typedef short ResourceIndex; ft_memcpy(ps_name, names[0] + 1, ps_name_len); ps_name[ps_name_len] = 0; } - if ( style->indexes[0] > 1 ) + if ( style->indexes[face_index] > 1 && + style->indexes[face_index] <= FT_MIN( string_count, 64 ) ) { - unsigned char* suffixes = names[style->indexes[0] - 1]; + unsigned char* suffixes = names[style->indexes[face_index] - 1]; for ( i = 1; i <= suffixes[0]; i++ ) diff --git a/src/base/ftmac.c b/src/base/ftmac.c index 8aa08c3c2..0b11c50fb 100644 --- a/src/base/ftmac.c +++ b/src/base/ftmac.c @@ -395,6 +395,10 @@ typedef short ResourceIndex; assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 ); base_assoc = assoc; + /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */ + if ( 47 < face_index ) + return; + /* Let's do a little range checking before we get too excited here */ if ( face_index < count_faces_sfnt( fond_data ) ) { @@ -446,9 +450,10 @@ typedef short ResourceIndex; ft_memcpy(ps_name, names[0] + 1, ps_name_len); ps_name[ps_name_len] = 0; } - if ( style->indexes[0] > 1 ) + if ( style->indexes[face_index] > 1 && + style->indexes[face_index] <= FT_MIN( string_count, 64 ) ) { - unsigned char* suffixes = names[style->indexes[0] - 1]; + unsigned char* suffixes = names[style->indexes[face_index] - 1]; for ( i = 1; i <= suffixes[0]; i++ )