Off-by-one error in texk/web2c/pdfetex.p

Albert Chin <[email protected]> Wed, 8 Mar 2006 00:54:26 -0600
Newsgroups gmane.comp.tex.tetex.general
Message-ID <[email protected]>
texk/web2c/pdfetexini.c contains the following ~line 116:
  {register integer for_end; i = 0 ;for_end = 255 ; if ( i <= for_end) do
    mubyteread [i ]= -268435455L ;
  while ( i++ < for_end ) ;}
  {register integer for_end; i = 0 ;for_end = 255 ; if ( i <= for_end) do
    mubytewrite [i ]= 0 ;
  while ( i++ < for_end ) ;}
  {register integer for_end; i = 0 ;for_end = 128 ; if ( i <= for_end) do
    mubytecswrite [i ]= -268435455L ;
  while ( i++ < for_end ) ;}

sizeof(mubyteread) = 256.
sizeof(mubytewrite) = 256.
sizeof(mubytecswrite) = 128.

The loop for mubyteread and mubytewrite is correct. However, for
mubytecswrite, you overwrite mubytecswrite[0] .. mubytecswrite[128].
You really want to overwrite mubytecswrite[0] .. mubytecswrite[127].

Seems like pdfetex.p is wrong. It declares mubytecswrite as:
  mubytecswrite:array[0..127]of halfword;mubyteskip:integer;
but overwrites the array:
  for i:=0 to 128 do mubytecswrite[i]:=-268435455;mubytekeep:=0;

-- 
albert chin ([email protected])