diff --git a/src/core/evaluator.js b/src/core/evaluator.js index e18c68a32..56f947c91 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -475,16 +475,24 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { return this.fontCache.get(fontRef); } - font = xref.fetchIfRef(fontRef); if (!isDict(font)) { return errorFont(); } - this.fontCache.put(fontRef, font); + // Workaround for bad PDF generators that doesn't reference fonts + // properly, i.e. by not using an object identifier. + // Check if the fontRef is a Dict (as opposed to a standard object), + // in which case we don't cache the font and instead reference it by + // fontName in font.loadedName below. + var fontRefIsDict = isDict(fontRef); + if (!fontRefIsDict) { + this.fontCache.put(fontRef, font); + } // keep track of each font we translated so the caller can // load them asynchronously before calling display on a page - font.loadedName = 'g_font_' + fontRef.num + '_' + fontRef.gen; + font.loadedName = 'g_font_' + (fontRefIsDict ? + fontName.replace(/\W/g, '') : (fontRef.num + '_' + fontRef.gen)); if (!font.translated) { var translated; diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index e5b382e9b..76685349d 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -61,3 +61,4 @@ !issue2099-1.pdf !issue3371.pdf !issue2956.pdf +!bug946506.pdf diff --git a/test/pdfs/bug946506.pdf b/test/pdfs/bug946506.pdf new file mode 100644 index 000000000..4c4c2786f Binary files /dev/null and b/test/pdfs/bug946506.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 942f3d2a3..5a14c69ad 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -42,6 +42,16 @@ "type": "load", "about": "PDF with undefined stream length." }, + { "id": "bug946506", + "file": "pdfs/bug946506.pdf", + "md5": "c28911b5c31bdc337c2ce404c5971cfc", + "rounds": 1, + "link": false, + "firstPage": 1, + "lastPage": 1, + "type": "eq", + "about": "Fonts referenced only by name and not by an object identifier." + }, { "id": "issue3879", "file": "pdfs/issue3879.pdf", "md5": "1cd1f1c3271515a14e65ff2980e14663",