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/04/09 13:06:31 UTC

svn commit: r1857197 - /pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java

Author: tilman
Date: Tue Apr  9 13:06:31 2019
New Revision: 1857197

URL: http://svn.apache.org/viewvc?rev=1857197&view=rev
Log:
PDFBOX-4489: check order of LangSysTag 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=1857197&r1=1857196&r2=1857197&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 Tue Apr  9 13:06:31 2019
@@ -113,10 +113,20 @@ public class GlyphSubstitutionTable exte
         int langSysCount = data.readUnsignedShort();
         LangSysRecord[] langSysRecords = new LangSysRecord[langSysCount];
         int[] langSysOffsets = new int[langSysCount];
+        String prevLangSysTag = "";
         for (int i = 0; i < langSysCount; i++)
         {
             LangSysRecord langSysRecord = new LangSysRecord();
             langSysRecord.langSysTag = data.readString(4);
+            if (i > 0 && langSysRecord.langSysTag.compareTo(prevLangSysTag) < 0)
+            {
+                // PDFBOX-4489: catch corrupt file
+                // https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#slTbl_sRec
+                LOG.error("LangSysRecords not alphabetically sorted by LangSys tag: " +
+                          langSysRecord.langSysTag + " <= " + prevLangSysTag);
+                scriptTable.langSysTables = new LinkedHashMap<String, LangSysTable>();
+                return scriptTable;
+            }
             langSysOffsets[i] = data.readUnsignedShort();
             langSysRecords[i] = langSysRecord;
         }