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",