1d3252
--- poppler-0.26.5/poppler/PSOutputDev.cc
1d3252
+++ poppler-0.26.5/poppler/PSOutputDev.cc
1d3252
@@ -2069,7 +2069,7 @@ void PSOutputDev::setupEmbeddedType1Font
1d3252
   static const char hexChar[17] = "0123456789abcdef";
1d3252
   Object refObj, strObj, obj1, obj2, obj3;
1d3252
   Dict *dict;
1d3252
-  int length1, length2, length3;
1d3252
+  long length1, length2, length3;
1d3252
   int c;
1d3252
   int start[4];
1d3252
   GBool binMode;
1d3252
@@ -2119,8 +2119,18 @@ void PSOutputDev::setupEmbeddedType1Font
1d3252
   embFontList->append(psName->getCString());
1d3252
   embFontList->append("\n");
1d3252
 
1d3252
-  // copy ASCII portion of font
1d3252
   strObj.streamReset();
1d3252
+  if (strObj.streamGetChar() == 0x80 &&
1d3252
+      strObj.streamGetChar() == 1) {
1d3252
+    // PFB format
1d3252
+    length1 = strObj.streamGetChar() |
1d3252
+             (strObj.streamGetChar() << 8) |
1d3252
+             (strObj.streamGetChar() << 16) |
1d3252
+             (strObj.streamGetChar() << 24);
1d3252
+  } else {
1d3252
+    strObj.streamReset();
1d3252
+  }
1d3252
+  // copy ASCII portion of font
1d3252
   for (i = 0; i < length1 && (c = strObj.streamGetChar()) != EOF; ++i) {
1d3252
     writePSChar(c);
1d3252
   }
1d3252
@@ -2153,9 +2163,18 @@ void PSOutputDev::setupEmbeddedType1Font
1d3252
 
1d3252
   // convert binary data to ASCII
1d3252
   if (binMode) {
1d3252
-    for (i = 0; i < 4; ++i) {
1d3252
-      writePSChar(hexChar[(start[i] >> 4) & 0x0f]);
1d3252
-      writePSChar(hexChar[start[i] & 0x0f]);
1d3252
+    if (start[0] == 0x80 &&
1d3252
+        start[1] == 2) {
1d3252
+      length2 = start[2] |
1d3252
+               (start[3] << 8) |
1d3252
+               (strObj.streamGetChar() << 16) |
1d3252
+               (strObj.streamGetChar() << 24);
1d3252
+      i = 0;
1d3252
+    } else {
1d3252
+      for (i = 0; i < 4; ++i) {
1d3252
+        writePSChar(hexChar[(start[i] >> 4) & 0x0f]);
1d3252
+        writePSChar(hexChar[start[i] & 0x0f]);
1d3252
+      }
1d3252
     }
1d3252
 #if 0 // this causes trouble for various PostScript printers
1d3252
     // if Length2 is incorrect (too small), font data gets chopped, so
1d3252
@@ -2193,8 +2212,32 @@ void PSOutputDev::setupEmbeddedType1Font
1d3252
   {
1d3252
     if (length3 > 0) {
1d3252
       // write fixed-content portion
1d3252
-      while ((c = strObj.streamGetChar()) != EOF) {
1d3252
-	writePSChar(c);
1d3252
+      c = strObj.streamGetChar();
1d3252
+      if (c == 0x80) {
1d3252
+        c = strObj.streamGetChar();
1d3252
+        if (c == 1) {
1d3252
+          length3 = strObj.streamGetChar() |
1d3252
+                   (strObj.streamGetChar() << 8) |
1d3252
+                   (strObj.streamGetChar() << 16) |
1d3252
+                   (strObj.streamGetChar() << 24);
1d3252
+
1d3252
+          i = 0;
1d3252
+          while (i < length3) {
1d3252
+            if ((c = strObj.streamGetChar()) == EOF) {
1d3252
+              break;
1d3252
+            }
1d3252
+            writePSChar(c);
1d3252
+            ++i;
1d3252
+          }
1d3252
+        }
1d3252
+      } else {
1d3252
+        if (c != EOF) {
1d3252
+          writePSChar(c);
1d3252
+
1d3252
+          while ((c = strObj.streamGetChar()) != EOF) {
1d3252
+	    writePSChar(c);
1d3252
+	  }
1d3252
+        }
1d3252
       }
1d3252
     } else {
1d3252
       // write padding and "cleartomark"