shithub: freetype+ttf2subf

Download patch

ref: 556ad08f03dcd890885eed2cdb8dbe51fae344ab
parent: e274290d71d952f1d6c227710b8bf9f042b696e7
author: Werner Lemberg <[email protected]>
date: Mon Jan 28 08:34:52 EST 2002

* 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.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2002-01-28  Roberto Alameda  <[email protected]>
+
+	* src/type1/t1load.c (parse_encoding): Set `loader->num_chars'.
+
+2002-01-28  Werner Lemberg  <[email protected]>
+
+	* 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  <[email protected]>
 
 	* src/smooth/ftgrays.c (gray_render_scanline): Fix bug which caused
--- 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 );