 texk/web2c/pdftexdir/hz.ch          |    3 ++-
 texk/web2c/pdftexdir/pdftex.ch      |    1 +
 texk/web2c/pdftexdir/pdftex.defines |    1 +
 texk/web2c/pdftexdir/utils.c        |   30 +++++++++++++++++++++++++++++-
 4 files changed, 33 insertions(+), 2 deletions(-)

Index: trunk/texk/web2c/pdftexdir/hz.ch
===================================================================
--- trunk.orig/texk/web2c/pdftexdir/hz.ch	2006-12-06 23:29:25.000000000 +0100
+++ trunk/texk/web2c/pdftexdir/hz.ch	2006-12-06 23:29:54.000000000 +0100
@@ -266,7 +266,7 @@
     pdf_font_expand_ratio[k] := e;
     pdf_font_step[k] := pdf_font_step[f];
     pdf_font_auto_expand[k] := pdf_font_auto_expand[f];
-    pdf_font_blink[k] := f; {???}
+    pdf_font_blink[k] := f;
     pdf_font_lp_base[k] := pdf_font_lp_base[f];
     pdf_font_rp_base[k] := pdf_font_rp_base[f];
     pdf_font_ef_base[k] := pdf_font_ef_base[f];
@@ -337,6 +337,7 @@
     e := pdf_font_expand_ratio[f];
     for k := 0 to vf_local_font_num[bf] - 1 do begin
         lf := vf_default_font[bf] + k;
+        allocvffnts;
         vf_e_fnts[vf_nf] := vf_e_fnts[lf];
         vf_i_fnts[vf_nf] := auto_expand_font(vf_i_fnts[lf], e);
         set_expand_param(vf_i_fnts[vf_nf], vf_i_fnts[lf], e);
Index: trunk/texk/web2c/pdftexdir/pdftex.ch
===================================================================
--- trunk.orig/texk/web2c/pdftexdir/pdftex.ch	2006-12-06 23:29:25.000000000 +0100
+++ trunk/texk/web2c/pdftexdir/pdftex.ch	2006-12-06 23:29:54.000000000 +0100
@@ -2260,6 +2260,7 @@
 cmd := vf_byte;
 save_vf_nf := vf_nf;
 while (cmd >= fnt_def1) and (cmd <= fnt_def1 + 3) do begin
+    allocvffnts;
     vf_e_fnts[vf_nf] := vf_read(cmd - fnt_def1 + 1);
     vf_i_fnts[vf_nf] := vf_def_font(f);
     incr(vf_nf);
Index: trunk/texk/web2c/pdftexdir/pdftex.defines
===================================================================
--- trunk.orig/texk/web2c/pdftexdir/pdftex.defines	2006-12-06 23:29:25.000000000 +0100
+++ trunk/texk/web2c/pdftexdir/pdftex.defines	2006-12-06 23:29:54.000000000 +0100
@@ -52,6 +52,7 @@
 @define procedure escapestr();
 @define function  escapedstrlen;
 @define function  getescapedchar();
+@define procedure allocvffnts;
 
 { functions from vfpacket.c }
 @define function newvfpacket();
Index: trunk/texk/web2c/pdftexdir/utils.c
===================================================================
--- trunk.orig/texk/web2c/pdftexdir/utils.c	2006-12-06 23:29:25.000000000 +0100
+++ trunk/texk/web2c/pdftexdir/utils.c	2006-12-06 23:29:54.000000000 +0100
@@ -48,7 +48,15 @@
 
 /* define char_ptr, char_array & char_limit */
 typedef char char_entry;
-define_array(char);   
+define_array(char);
+
+/* define vf_e_fnts_ptr, vf_e_fnts_array & vf_e_fnts_limit */
+typedef integer vf_e_fnts_entry;
+define_array (vf_e_fnts);
+
+/* define vf_i_fnts_ptr, vf_i_fnts_array & vf_i_fnts_limit */
+typedef internalfontnumber vf_i_fnts_entry;
+define_array (vf_i_fnts);
 
 integer fb_offset(void)
 {
@@ -628,3 +636,23 @@
         pdftex_fail("getescapedchar(): index out of range");
     return escaped_string[index];
 }
+
+void allocvffnts(void)
+{
+    if (vf_e_fnts_array == NULL) {
+        vf_e_fnts_array = vfefnts;
+        vf_e_fnts_limit = fontmax;
+        vf_e_fnts_ptr   = vf_e_fnts_array;
+        vf_i_fnts_array = vfifnts;
+        vf_i_fnts_limit = fontmax;
+        vf_i_fnts_ptr   = vf_i_fnts_array;
+    }
+    alloc_array(vf_e_fnts, 1, fontmax);
+    vf_e_fnts_ptr++;
+    alloc_array(vf_i_fnts, 1, fontmax);
+    vf_i_fnts_ptr++;
+    if (vf_e_fnts_array != vfefnts) {
+        vfefnts = vf_e_fnts_array;
+        vfifnts = vf_i_fnts_array;
+    }
+}
