diff --git a/ChangeLog b/ChangeLog index 131d9e45e..20ef4b9fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-01-28 Roberto Alameda + + * src/type1/t1load.c (parse_encoding): Set `loader->num_chars'. + +2002-01-28 Werner Lemberg + + * src/type1/t1load.c (parse_subrs, parse_charstrings): Use copy + of `base' string for decrypting to not modify the original data. + 2002-01-27 Giuliano Pochini * src/smooth/ftgrays.c (gray_render_scanline): Fix bug which caused diff --git a/src/type1/t1load.c b/src/type1/t1load.c index 817c940c1..69116f0c6 100644 --- a/src/type1/t1load.c +++ b/src/type1/t1load.c @@ -971,7 +971,7 @@ return; /* we use a T1_Table to store our charnames */ - encode->num_chars = count; + loader->num_chars = encode->num_chars = count; if ( ALLOC_ARRAY( encode->char_index, count, FT_Short ) || ALLOC_ARRAY( encode->char_name, count, FT_String* ) || ( error = psaux->ps_table_funcs->init( @@ -1164,12 +1164,21 @@ /* */ if ( face->type1.private_dict.lenIV >= 0 ) { - psaux->t1_decrypt( base, size, 4330 ); - size -= face->type1.private_dict.lenIV; - base += face->type1.private_dict.lenIV; - } + FT_Byte* temp; - error = T1_Add_Table( table, index, base, size ); + + /* t1_decrypt() shouldn't write to base -- make temporary copy */ + if ( ALLOC( temp, size ) ) + goto Fail; + MEM_Copy( temp, base, size ); + psaux->t1_decrypt( temp, size, 4330 ); + size -= face->type1.private_dict.lenIV; + error = T1_Add_Table( table, index, + temp + face->type1.private_dict.lenIV, size ); + FREE( temp ); + } + else + error = T1_Add_Table( table, index, base, size ); if ( error ) goto Fail; } @@ -1296,12 +1305,21 @@ if ( face->type1.private_dict.lenIV >= 0 ) { - psaux->t1_decrypt( base, size, 4330 ); - size -= face->type1.private_dict.lenIV; - base += face->type1.private_dict.lenIV; - } + FT_Byte* temp; - error = T1_Add_Table( code_table, n, base, size ); + + /* t1_decrypt() shouldn't write to base -- make temporary copy */ + if ( ALLOC( temp, size ) ) + goto Fail; + MEM_Copy( temp, base, size ); + psaux->t1_decrypt( temp, size, 4330 ); + size -= face->type1.private_dict.lenIV; + error = T1_Add_Table( code_table, n, + temp + face->type1.private_dict.lenIV, size ); + FREE( temp ); + } + else + error = T1_Add_Table( code_table, n, base, size ); if ( error ) goto Fail; @@ -1425,10 +1443,8 @@ /* we added a glyph. */ loader->num_glyphs = n + 1; - } - return; Fail: @@ -1734,7 +1750,7 @@ type1->encoding.code_first = min_char; type1->encoding.code_last = max_char; type1->encoding.num_chars = loader.num_chars; - } + } Exit: t1_done_loader( &loader );