[tex-live] Re: [tex-implementors] Re: bug in etex

Philip TAYLOR P.Taylor at Rhul.Ac.Uk
Tue Jul 13 16:21:08 CEST 2004


If I can find my Pascal reference implementation,
I'll test Taco's code there.

** Phil.
--------
Taco Hoekwater wrote:

> Hi all (especially Peter),
> 
> 
>>Hi Taco (since i think that you qualify for sorting this out -) and others,
>>
>>Etex can have > 256 token registers. The following fails (bombs) on my machine 
>>(i cannot make atest file since it's part of a more complex piece of code) 
>>....
> 
> 
> I've been working on this for quite a few hours now, and there really is a bug
> somewhere in the (web2c version of) the etex code. The following extended 
> mode plain input file causes both of pdfetex and etex (Web2c 7.5.3 and 7.4.5) 
> to quit with SIGSEGV under linux:
> 
> ------
>   \toksdef\whatevertoks = 266
>   \toksdef\extratoks = 267
>   \whatevertoks={junk}
>   \everypar{\extratoks=\whatevertoks}
>   \immediate\write16{t={\the\toks265}}
>   some paragraph\par
>   \bye
> -------
> 
> It seems that the '\the' command that accesses a previously undefined token 
> register is what is causing the problem later on; the SIGSEGV happens when
> TeX tries to access the RHS of the \extratoks=\whatevertoks assignment.
> 
> ------
>   (gdb) r
>   Starting program: /home/taco/perforce/Build/source.development/Work/TeX/texk/
>    web2c/tests/texmf/bin/pdfetex \&plain dumptest
>   This is pdfeTeX, Version 3.141592-1.20a-rc4-2.1 (Web2C 7.5.3)
>    \write18 enabled.
>   output format initialized to DVI
>   entering extended mode
>   (./dumptest.tex
>   t={}
> 
>   Program received signal SIGSEGV, Segmentation fault.
>   0x0805048f in prefixedcommand () at pdfetexini.c:2903
>   2903            else q = mem [curptr + 1 ].hh .v.RH ;
>   (gdb) bt
>   #0  0x0805048f in prefixedcommand () at pdfetexini.c:2903
>   #1  0x08095c46 in maincontrol () at pdfetex3.c:6560
>   #2  0x080576a4 in mainbody () at pdfetexini.c:5592
>   #3  0x0809a08d in main (ac=3, av=0xbffff4b4) at pdfetexextra.c:327
>   (gdb) p curptr
>   $1 = -268435455
> -----
> 
> I hope Peter can sort this out quicker than I can. The line in the 
> stack trace refers to this section of the web, the marked line {HERE!}:
> 
> ------
> @ @<If the right-hand side is a token parameter...@>=
> if (cur_cmd=toks_register)or(cur_cmd=assign_toks) then
>   begin if cur_cmd=toks_register then
>     if cur_chr=mem_bot then
>       begin scan_register_num;
>       if cur_val<256 then q:=equiv(toks_base+cur_val)
>       else  begin find_sa_element(tok_val,cur_val,false);
>         if cur_ptr=null then q:=null
>         else q:=sa_ptr(cur_ptr);
>         end;
>       end
>     else q:=sa_ptr(cur_ptr)  {HERE! }
>   else q:=equiv(cur_chr);
>   if q=null then sa_define(p,null)(p,undefined_cs,null)
>   else  begin add_token_ref(q); sa_define(p,q)(p,call,q);
>     end;
>   goto done;
>   end
> ------
> And 
> ------
>   curptr (in C)  == cur_ptr (in pWeb) 
>   -268435455 (in C) == null (in pWeb)
> -----
> 



More information about the tex-live mailing list