You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/05 20:51:10 UTC

svn commit: r1615976 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java

Author: jahewson
Date: Tue Aug  5 18:51:10 2014
New Revision: 1615976

URL: http://svn.apache.org/r1615976
Log:
PDFBOX-2244: Handle out-of-order array indexes

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java?rev=1615976&r1=1615975&r2=1615976&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java Tue Aug  5 18:51:10 2014
@@ -588,7 +588,12 @@ final class Type1Parser
      */
     private void readSubrs(int lenIV) throws IOException
     {
+        // allocate size (array indexes may not be in-order)
         int length = read(Token.INTEGER).intValue();
+        for (int i = 0; i < length; i++)
+        {
+            font.subrs.add(null);
+        }
         read(Token.NAME, "array");
 
         for (int i = 0; i < length; i++)
@@ -601,12 +606,12 @@ final class Type1Parser
             }
 
             read(Token.NAME, "dup");
-            read(Token.INTEGER);
+            Token index = read(Token.INTEGER);
             read(Token.INTEGER);
 
             // RD
             Token charstring = read(Token.CHARSTRING);
-            font.subrs.add(decrypt(charstring.getData(), CHARSTRING_KEY, lenIV));
+            font.subrs.set(index.intValue(), decrypt(charstring.getData(), CHARSTRING_KEY, lenIV));
             readPut();
         }
         readDef();