diff --git a/src/core/fonts.js b/src/core/fonts.js index ca2c01179..aa40dbcaa 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -2651,6 +2651,25 @@ class Font { unicodeOrCharCode = MacRomanEncoding.indexOf(standardGlyphName); } + if (unicodeOrCharCode === undefined) { + // Not a valid glyph name, fallback to using the /ToUnicode map + // when no post-table exists (fixes issue13316_reduced.pdf). + if ( + !properties.glyphNames && + properties.hasIncludedToUnicodeMap && + !(this.toUnicode instanceof IdentityToUnicodeMap) + ) { + const unicode = this.toUnicode.get(charCode); + if (unicode) { + unicodeOrCharCode = unicode.codePointAt(0); + } + } + + if (unicodeOrCharCode === undefined) { + continue; // No valid glyph mapping found. + } + } + for (let i = 0; i < cmapMappingsLength; ++i) { if (cmapMappings[i].charCode !== unicodeOrCharCode) { continue; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index bc9a1dd8e..ee07ee273 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -240,6 +240,7 @@ !issue4304.pdf !issue4379.pdf !issue4550.pdf +!issue13316_reduced.pdf !issue4575.pdf !bug1011159.pdf !issue5734.pdf diff --git a/test/pdfs/issue13316_reduced.pdf b/test/pdfs/issue13316_reduced.pdf new file mode 100644 index 000000000..2ebbd1a5e Binary files /dev/null and b/test/pdfs/issue13316_reduced.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 1cf730d01..17dc5893b 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -4321,6 +4321,12 @@ "lastPage": 4, "type": "load" }, + { "id": "issue13316", + "file": "pdfs/issue13316_reduced.pdf", + "md5": "f5821891cee29d8de8b65e1efd6f4ceb", + "rounds": 1, + "type": "eq" + }, { "id": "issue10519", "file": "pdfs/issue10519_reduced.pdf", "md5": "8a2dae43c0ef47b0734bedaaa24f8c09",