diff options
author | Werner Lemberg <wl@gnu.org> | 2002-01-28 13:34:52 +0000 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2002-01-28 13:34:52 +0000 |
commit | 7c836c227c475f7f8d63186f70ffbbb552b2f6a9 (patch) | |
tree | 6a424b62d6c06e017998006ee57f4824e1f06f29 | |
parent | 5e99e926197fa72b1d9b8ac450469275b1b3dd8b (diff) | |
download | freetype2-7c836c227c475f7f8d63186f70ffbbb552b2f6a9.tar.gz |
* src/type1/t1load.c (parse_encoding): Set `loader->num_chars'.
* src/type1/t1load.c (parse_subrs, parse_charstrings): Use copy
of `base' string for decrypting to not modify the original data.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | src/type1/t1load.c | 40 |
2 files changed, 37 insertions, 12 deletions
@@ -1,3 +1,12 @@ +2002-01-28 Roberto Alameda <ojancano@geekmail.de> + + * src/type1/t1load.c (parse_encoding): Set `loader->num_chars'. + +2002-01-28 Werner Lemberg <wl@gnu.org> + + * 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 <pochini@shiny.it> * 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 ); + FT_Byte* temp; + + + /* 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; - base += face->type1.private_dict.lenIV; + error = T1_Add_Table( table, index, + temp + face->type1.private_dict.lenIV, size ); + FREE( temp ); } - - error = T1_Add_Table( table, index, base, size ); + 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 ); + FT_Byte* temp; + + + /* 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; - base += face->type1.private_dict.lenIV; + error = T1_Add_Table( code_table, n, + temp + face->type1.private_dict.lenIV, size ); + FREE( temp ); } - - error = T1_Add_Table( code_table, n, base, size ); + 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 ); |