You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2021/04/20 20:27:59 UTC

svn commit: r1889034 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java

Author: lehmi
Date: Tue Apr 20 20:27:59 2021
New Revision: 1889034

URL: http://svn.apache.org/viewvc?rev=1889034&view=rev
Log:
PDFBOX-5143: avoid using out of range positions

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java?rev=1889034&r1=1889033&r2=1889034&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java Tue Apr 20 20:27:59 2021
@@ -248,13 +248,18 @@ public class CFFParser
         return dict;
     }
 
-    private static DictData readDictData(CFFDataInput input, int dictSize) throws IOException
+    private static DictData readDictData(CFFDataInput input, int offset, int dictSize)
+            throws IOException
     {
         DictData dict = new DictData();
-        int endPosition = input.getPosition() + dictSize;
-        while (input.getPosition() < endPosition)
+        if (dictSize > 0)
         {
-            dict.add(readEntry(input));
+            input.setPosition(offset);
+            int endPosition = offset + dictSize;
+            while (input.getPosition() < endPosition)
+            {
+                dict.add(readEntry(input));
+            }
         }
         return dict;
     }
@@ -663,9 +668,8 @@ public class CFFParser
             fontDictionaries.add(fontDictMap);
 
             int privateOffset = privateEntry.getNumber(1).intValue();
-            input.setPosition(privateOffset);
             int privateSize = privateEntry.getNumber(0).intValue();
-            DictData privateDict = readDictData(input, privateSize);
+            DictData privateDict = readDictData(input, privateOffset, privateSize);
 
             // populate private dict
             Map<String, Object> privDict = readPrivateDict(privateDict);
@@ -750,9 +754,8 @@ public class CFFParser
             throw new IOException("Private dictionary entry missing for font " + font.getName());
         }
         int privateOffset = privateEntry.getNumber(1).intValue();
-        input.setPosition(privateOffset);
         int privateSize = privateEntry.getNumber(0).intValue();
-        DictData privateDict = readDictData(input, privateSize);
+        DictData privateDict = readDictData(input, privateOffset, privateSize);
 
         // populate private dict
         Map<String, Object> privDict = readPrivateDict(privateDict);