#444 handle invalid tounicode map objects in tt fonts

This commit is contained in:
Eliot Jones 2022-05-02 16:17:05 -04:00
parent 03692cf42f
commit 4e490d63be

View File

@ -107,18 +107,25 @@
CMap toUnicodeCMap = null; CMap toUnicodeCMap = null;
if (dictionary.TryGet(NameToken.ToUnicode, out var toUnicodeObj)) if (dictionary.TryGet(NameToken.ToUnicode, out var toUnicodeObj))
{ {
var toUnicode = DirectObjectFinder.Get<StreamToken>(toUnicodeObj, pdfScanner); try
var decodedUnicodeCMap = toUnicode.Decode(filterProvider, pdfScanner);
if (decodedUnicodeCMap != null)
{ {
toUnicodeCMap = CMapCache.Parse(new ByteArrayInputBytes(decodedUnicodeCMap)); var toUnicode = DirectObjectFinder.Get<StreamToken>(toUnicodeObj, pdfScanner);
var decodedUnicodeCMap = toUnicode.Decode(filterProvider, pdfScanner);
if (decodedUnicodeCMap != null)
{
toUnicodeCMap = CMapCache.Parse(new ByteArrayInputBytes(decodedUnicodeCMap));
}
}
catch (Exception ex)
{
log.Error("Failed to decode ToUnicode CMap for a TrueType font in file due to an exception.", ex);
} }
} }
Encoding encoding = encodingReader.Read(dictionary, descriptor); Encoding encoding = encodingReader.Read(dictionary, descriptor);
if (encoding == null && font?.TableRegister?.CMapTable != null if (encoding == null && font?.TableRegister?.CMapTable != null
&& font.TableRegister.PostScriptTable?.GlyphNames != null) && font.TableRegister.PostScriptTable?.GlyphNames != null)
{ {
@ -199,7 +206,7 @@
$"Expected a TrueType font in the TrueType font descriptor, instead it was {descriptor.FontFile.FileType}."); $"Expected a TrueType font in the TrueType font descriptor, instead it was {descriptor.FontFile.FileType}.");
} }
} }
var font = TrueTypeFontParser.Parse(new TrueTypeDataBytes(new ByteArrayInputBytes(fontFile))); var font = TrueTypeFontParser.Parse(new TrueTypeDataBytes(new ByteArrayInputBytes(fontFile)));
return font; return font;