Author: tilman
Date: Wed Jan 14 08:06:12 2026
New Revision: 1931305

Log:
PDFBOX-6146: don't load duplicate content (helps avoiding broken content but 
also saves space), as suggested by james

Modified:
   
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java

Modified: 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
==============================================================================
--- 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
        Wed Jan 14 07:25:13 2026        (r1931304)
+++ 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
        Wed Jan 14 08:06:12 2026        (r1931305)
@@ -110,6 +110,11 @@ public class GlyphSubstitutionTable exte
         LinkedHashMap<String, ScriptTable> resultScriptList = new 
LinkedHashMap<String, ScriptTable>(scriptCount);
         for (ScriptRecord scriptRecord : scriptRecords)
         {
+            if (resultScriptList.get(scriptRecord.scriptTag) != null)
+            {
+                // PDFBOX-6146
+                continue;
+            }
             resultScriptList.put(scriptRecord.scriptTag, 
scriptRecord.scriptTable);
         }
         return resultScriptList;
@@ -237,9 +242,16 @@ public class GlyphSubstitutionTable exte
             lookups[i] = data.readUnsignedShort();
         }
         LookupTable[] lookupTables = new LookupTable[lookupCount];
+        Map<Integer, LookupTable> lookupTableMap = new HashMap<Integer, 
LookupTable>(); // PDFBOX-6146
         for (int i = 0; i < lookupCount; i++)
         {
-            lookupTables[i] = readLookupTable(data, offset + lookups[i]);
+            LookupTable lookupTable = lookupTableMap.get(lookups[i]);
+            if (lookupTable == null)
+            {
+                lookupTable = readLookupTable(data, offset + lookups[i]);
+                lookupTableMap.put(lookups[i], lookupTable);
+            }
+            lookupTables[i] = lookupTable;
         }
         return lookupTables;
     }

Reply via email to