File xpdf-cid-ttf-unicode-fix2.diff of Package xpdf

--- xpdf/GfxFont.cc
+++ xpdf/GfxFont.cc
@@ -1486,7 +1486,8 @@
   int unicodeCmap, macRomanCmap, msSymbolCmap, cmap;
   GBool useMacRoman, useUnicode;
   char *charName;
-  Unicode u;
+  Unicode u[64];
+  const int ulen = sizeof(u) / sizeof(Unicode);
   int code, i;
   int mapsize;
   int cidlen;
@@ -1510,7 +1511,7 @@
 
   while (cidlen < ctu->getMapLen()) {
     int n;
-    if ((n = ctu->mapToUnicode((CharCode)cidlen, &u, 1)) == 0) {
+    if ((n = ctu->mapToUnicode((CharCode)cidlen, u, ulen)) == 0) {
       cidlen++;
       continue;
     }
@@ -1519,7 +1520,20 @@
 	mapsize *= 2;
       map = (Gushort *)grealloc(map, mapsize * sizeof(Gushort));
     }
-    map[cidlen] = ff->mapCodeToGID(cmap, u);
+    if (n == 1)
+      map[cidlen] = ff->mapCodeToGID(cmap, u[0]);
+    else {
+      char str[n + 1];
+      Unicode u2;
+      for (i = 0; i < n; i++)
+	str[i] = u[i];
+      str[i] = 0;
+      u2 = globalParams->mapNameToUnicode(str);
+      if (u2)
+	map[cidlen] = ff->mapCodeToGID(cmap, u2);
+      else
+	map[cidlen] = cidlen; /* FIXME */
+    }
     cidlen++;
   }
 
openSUSE Build Service is sponsored by