Author: tilman
Date: Wed Jan 14 05:45:31 2026
New Revision: 1931301

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

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

Modified: 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
==============================================================================
--- 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
        Wed Jan 14 05:40:39 2026        (r1931300)
+++ 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java
        Wed Jan 14 05:45:31 2026        (r1931301)
@@ -152,6 +152,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);
         }
@@ -287,9 +292,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