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