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);