summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Lemberg <wl@gnu.org>2002-01-28 13:34:52 +0000
committerWerner Lemberg <wl@gnu.org>2002-01-28 13:34:52 +0000
commit7c836c227c475f7f8d63186f70ffbbb552b2f6a9 (patch)
tree6a424b62d6c06e017998006ee57f4824e1f06f29
parent5e99e926197fa72b1d9b8ac450469275b1b3dd8b (diff)
downloadfreetype2-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--ChangeLog9
-rw-r--r--src/type1/t1load.c40
2 files changed, 37 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 131d9e45e..20ef4b9fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 );