Author: tilman
Date: Wed Jan 14 05:45:35 2026
New Revision: 1931302

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

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

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
==============================================================================
--- 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
       Wed Jan 14 05:45:31 2026        (r1931301)
+++ 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
       Wed Jan 14 05:45:35 2026        (r1931302)
@@ -179,6 +179,11 @@ public class GlyphSubstitutionTable exte
         }
         for (int i = 0; i < scriptCount; i++)
         {
+            if (resultScriptList.get(scriptTags[i]) != null)
+            {
+                // PDFBOX-6146
+                continue;
+            }
             ScriptTable scriptTable = readScriptTable(data, offset + 
scriptOffsets[i]);
             resultScriptList.put(scriptTags[i], scriptTable);
         }
@@ -315,9 +320,16 @@ public class GlyphSubstitutionTable exte
             }
         }
         LookupTable[] lookupTables = new LookupTable[lookupCount];
+        Map<Integer, LookupTable> lookupTableMap = new HashMap<>(); // 
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 new LookupListTable(lookupCount, lookupTables);
     }

Reply via email to