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);
}