[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