* 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.
This commit is contained in:
Werner Lemberg 2002-01-28 13:34:52 +00:00
parent e274290d71
commit 556ad08f03
2 changed files with 39 additions and 14 deletions

View File

@ -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> 2002-01-27 Giuliano Pochini <pochini@shiny.it>
* src/smooth/ftgrays.c (gray_render_scanline): Fix bug which caused * src/smooth/ftgrays.c (gray_render_scanline): Fix bug which caused

View File

@ -971,7 +971,7 @@
return; return;
/* we use a T1_Table to store our charnames */ /* 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 ) || if ( ALLOC_ARRAY( encode->char_index, count, FT_Short ) ||
ALLOC_ARRAY( encode->char_name, count, FT_String* ) || ALLOC_ARRAY( encode->char_name, count, FT_String* ) ||
( error = psaux->ps_table_funcs->init( ( error = psaux->ps_table_funcs->init(
@ -1164,12 +1164,21 @@
/* */ /* */
if ( face->type1.private_dict.lenIV >= 0 ) if ( face->type1.private_dict.lenIV >= 0 )
{ {
psaux->t1_decrypt( base, size, 4330 ); FT_Byte* temp;
size -= face->type1.private_dict.lenIV;
base += face->type1.private_dict.lenIV;
}
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 ) if ( error )
goto Fail; goto Fail;
} }
@ -1296,12 +1305,21 @@
if ( face->type1.private_dict.lenIV >= 0 ) if ( face->type1.private_dict.lenIV >= 0 )
{ {
psaux->t1_decrypt( base, size, 4330 ); FT_Byte* temp;
size -= face->type1.private_dict.lenIV;
base += face->type1.private_dict.lenIV;
}
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 ) if ( error )
goto Fail; goto Fail;
@ -1425,10 +1443,8 @@
/* we added a glyph. */ /* we added a glyph. */
loader->num_glyphs = n + 1; loader->num_glyphs = n + 1;
} }
return; return;
Fail: Fail:
@ -1734,7 +1750,7 @@
type1->encoding.code_first = min_char; type1->encoding.code_first = min_char;
type1->encoding.code_last = max_char; type1->encoding.code_last = max_char;
type1->encoding.num_chars = loader.num_chars; type1->encoding.num_chars = loader.num_chars;
} }
Exit: Exit:
t1_done_loader( &loader ); t1_done_loader( &loader );