You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/06/26 17:30:39 UTC
svn commit: r1862172 -
/pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
Author: tilman
Date: Wed Jun 26 17:30:39 2019
New Revision: 1862172
URL: http://svn.apache.org/viewvc?rev=1862172&view=rev
Log:
PDFBOX-4580: check order of FeatureRecord array in the hope to detect corrupt table
Modified:
pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
Modified: pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java?rev=1862172&r1=1862171&r2=1862172&view=diff
==============================================================================
--- pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java (original)
+++ pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java Wed Jun 26 17:30:39 2019
@@ -167,12 +167,22 @@ public class GlyphSubstitutionTable exte
int featureCount = data.readUnsignedShort();
FeatureRecord[] featureRecords = new FeatureRecord[featureCount];
int[] featureOffsets = new int[featureCount];
+ String prevFeatureTag = "";
for (int i = 0; i < featureCount; i++)
{
FeatureRecord featureRecord = new FeatureRecord();
featureRecord.featureTag = data.readString(4);
+ if (i > 0 && featureRecord.featureTag.compareTo(prevFeatureTag) < 0)
+ {
+ // catch corrupt file
+ // https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#flTbl
+ LOG.error("FeatureRecord array not alphabetically sorted by FeatureTag: " +
+ featureRecord.featureTag + " < " + prevFeatureTag);
+ return new FeatureRecord[0];
+ }
featureOffsets[i] = data.readUnsignedShort();
featureRecords[i] = featureRecord;
+ prevFeatureTag = featureRecord.featureTag;
}
for (int i = 0; i < featureCount; i++)
{