texlive[46456] Build/source/texk/dvipos: dvipos: support new JFM

commits+hironobu at tug.org commits+hironobu at tug.org
Sat Jan 27 03:26:53 CET 2018


Revision: 46456
          http://tug.org/svn/texlive?view=revision&revision=46456
Author:   hironobu
Date:     2018-01-27 03:26:53 +0100 (Sat, 27 Jan 2018)
Log Message:
-----------
dvipos: support new JFM spec, avoid segfault

Modified Paths:
--------------
    trunk/Build/source/texk/dvipos/ChangeLog
    trunk/Build/source/texk/dvipos/tfm.c
    trunk/Build/source/texk/dvipos/utils.c
    trunk/Build/source/texk/dvipos/utils.h

Modified: trunk/Build/source/texk/dvipos/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvipos/ChangeLog	2018-01-27 02:25:40 UTC (rev 46455)
+++ trunk/Build/source/texk/dvipos/ChangeLog	2018-01-27 02:26:53 UTC (rev 46456)
@@ -1,3 +1,8 @@
+2018-01-27  Hironobu Yamashita  <h.y.acetaminophen at gmail.com>
+
+	* tfm.c, utils.[ch]: Support new JFM spec (3-byte characters
+	in TYPE > 0). This also avoids a segmentation fault.
+
 2015-06-16  Peter Breitenlohner  <peb at mppmu.mpg.de>
 
 	* c-auto.in (removed): Unused, replaced ...

Modified: trunk/Build/source/texk/dvipos/tfm.c
===================================================================
--- trunk/Build/source/texk/dvipos/tfm.c	2018-01-27 02:25:40 UTC (rev 46455)
+++ trunk/Build/source/texk/dvipos/tfm.c	2018-01-27 02:26:53 UTC (rev 46456)
@@ -33,6 +33,7 @@
 #define tfm_unsigned_pair()   get_unsigned_pair(tfm_file)
 #define tfm_signed_pair()     get_signed_pair(tfm_file)
 #define tfm_unsigned_triple() get_unsigned_triple(tfm_file)
+#define tfm_unsigned_triple_kanji() get_unsigned_triple_kanji(tfm_file)
 #define tfm_signed_triple()   get_signed_triple(tfm_file)
 #define tfm_unsigned_quad()   get_unsigned_quad(tfm_file)
 #define tfm_signed_quad()     get_signed_quad(tfm_file)
@@ -66,7 +67,7 @@
   SIGNED_QUAD *height;
   SIGNED_QUAD *depth;
   char *tex_name;
-  UNSIGNED_PAIR *chartypes;
+  UNSIGNED_TRIPLE *chartypes;
   fixword *unpacked_widths;
   fixword *unpacked_heights;
   fixword *unpacked_depths;
@@ -282,11 +283,11 @@
   UNSIGNED_PAIR chartype;
   register int i;
 
-  a_tfm -> chartypes = (UNSIGNED_PAIR *)calloc(65536, sizeof(UNSIGNED_PAIR));
-  for (i = 0; i < 65536; i++) (a_tfm->chartypes)[i] = 0;
+  a_tfm -> chartypes = (UNSIGNED_TRIPLE *)calloc(1114112, sizeof(UNSIGNED_TRIPLE));
+  for (i = 0; i < 1114112; i++) (a_tfm->chartypes)[i] = 0;
   for (i = 0; i < a_tfm->nt; i++) {
-    charcode = tfm_unsigned_pair();
-    chartype = tfm_unsigned_pair();
+    charcode = tfm_unsigned_triple_kanji();
+    chartype = tfm_unsigned_byte();
     (a_tfm->chartypes)[charcode] = chartype;
   }
 }

Modified: trunk/Build/source/texk/dvipos/utils.c
===================================================================
--- trunk/Build/source/texk/dvipos/utils.c	2018-01-27 02:25:40 UTC (rev 46455)
+++ trunk/Build/source/texk/dvipos/utils.c	2018-01-27 02:26:53 UTC (rev 46456)
@@ -59,6 +59,15 @@
   return triple;
 }
 
+UNSIGNED_TRIPLE get_unsigned_triple_kanji (FILE *fp)
+{
+  /* yy zz XX -> XXyyzz */
+  UNSIGNED_TRIPLE triple = get_unsigned_byte(fp);
+  triple = triple << 8; triple += get_unsigned_byte(fp);
+  triple += get_unsigned_byte(fp) << 16;
+  return triple;
+}
+
 SIGNED_TRIPLE get_signed_triple (FILE *fp)
 {
   UNSIGNED_TRIPLE triple;

Modified: trunk/Build/source/texk/dvipos/utils.h
===================================================================
--- trunk/Build/source/texk/dvipos/utils.h	2018-01-27 02:25:40 UTC (rev 46455)
+++ trunk/Build/source/texk/dvipos/utils.h	2018-01-27 02:26:53 UTC (rev 46456)
@@ -40,6 +40,7 @@
 extern UNSIGNED_PAIR get_unsigned_pair (FILE *fp);
 extern SIGNED_PAIR get_signed_pair (FILE *fp);
 extern UNSIGNED_TRIPLE get_unsigned_triple (FILE *fp);
+extern UNSIGNED_TRIPLE get_unsigned_triple_kanji (FILE *fp);
 extern SIGNED_TRIPLE get_signed_triple (FILE *fp);
 extern UNSIGNED_QUAD get_unsigned_quad (FILE *fp);
 extern SIGNED_QUAD get_signed_quad (FILE *fp);



More information about the tex-live-commits mailing list