Tcl Source Code

View Ticket
Login
Ticket UUID: 916795
Title: Bus error after bad syntax
Type: Bug Version: obsolete: 8.4.6
Submitter: dgp Created on: 2004-03-15 18:35:49
Subsystem: 45. Parsing and Eval Assigned To: msofer
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2004-03-16 03:51:11
Resolution: Duplicate Closed By: msofer
    Closed on: 2004-03-15 20:51:11
Description:
Roy Terry reports on clt that the attached script
crashes Tcl 8.4.6 (but not 8.5a1).  Confirmed
on Solaris 9.
User Comments: msofer added on 2004-03-16 03:51:10:
Logged In: YES 
user_id=148712

Fix for 705496 now backported to 8-4-branch. Tcl8.4.6 (last
of the 8.4.x?) does not contain this fix, too late for that.

dgp added on 2004-03-16 03:13:36:
Logged In: YES 
user_id=80530


Looks like this is a duplicate
of Tcl Bug 705496, and looks
like this was fixed only on HEAD,
and not backported to 8-4-branch.

D'oh!

Leaving this open until the backport,
FWIW.

dgp added on 2004-03-16 02:59:36:
Logged In: YES 
user_id=80530


With tcl_traceCompile enabled, I see:

  Command 6: "catch {set dlist $cam(sv,$cnum,$d} "
    (64) beginCatch4 2
    (69) push1 7        # "catch"
    (71) push1 8        # "set dlist $cam(sv,$cnum,$d"
    (73) invokeStk1 2
    (75) tryCvtToNumeric
    (76) jumpFalse1 5   # pc 81

That looks like the attempt to compile
[catch] first produced a beginCatch4 opcode,
but then the compiler changed its mind and
dropped back to direct string evaluation
of the [catch] command (invokeStk), but
didnt clear away the beginCatch4 opcode?

msofer added on 2004-03-16 02:50:14:
Logged In: YES 
user_id=148712

Confirmed segfault on linux for 8.4.5; neither 8-4-branch
nor 8.5a1 show the problem.

dgp added on 2004-03-16 02:09:07:
Logged In: YES 
user_id=80530


Stack trace on Linux/Alpha:

Program received signal SIGSEGV, Segmentation fault.
0x12008aed4 in TclExecuteByteCode (interp=0x12021ca60,
codePtr=0x12024e9f0)
    at ./../generic/tclExecute.c:3988
3988            catchStackPtr[++catchTop] = stackTop;
(gdb) bt
#0  0x12008aed4 in TclExecuteByteCode (interp=0x12021ca60,
codePtr=0x12024e9f0)
    at ./../generic/tclExecute.c:3988
#1  0x12007ef94 in TclCompEvalObj (interp=0x12021ca60,
objPtr=0x12024a1d0)
    at ./../generic/tclExecute.c:982
#2  0x120019980 in TclObjInterpProc (clientData=0x12024e220, 
    interp=0x12021ca60, objc=3, objv=0x11fffef50)
    at ./../generic/tclProc.c:1082
#3  0x1200367f8 in TclEvalObjvInternal (interp=0x12021ca60,
objc=3, 
    objv=0x11fffef50, command=0x12024d97c "avSubsCalc 1
0\n", length=15, 
    flags=0) at ./../generic/tclBasic.c:3087
#4  0x1200378b4 in Tcl_EvalEx (interp=0x12021ca60, 
    script=0x12024d7f0 "set cam(sv,1,east)  {{3 5} {4
8}}\nset cam(sv,1,order) {
2 3 5}\nset cam(sv,1,west)  {2 10}\nset cam(sv,2,order)
4\nset cam(sv,2,west)  {
4 5}\nset cam(sv,dirs)    {east west}\nproc avSubsCalc {cnum
t0 {dir \""..., 
    numBytes=411, flags=0) at ./../generic/tclBasic.c:3682
#5  0x1200b26a8 in Tcl_FSEvalFile (interp=0x12021ca60,
pathPtr=0x12021a700)
    at ./../generic/tclIOUtil.c:1749
#6  0x120010228 in Tcl_Main (argc=1, argv=0x11ffff3f0, 
    appInitProc=0x12000fba0 <Tcl_AppInit>) at
./../generic/tclMain.c:292
#7  0x12000fb7c in main (argc=2, argv=0x11ffff3e8) at
./../unix/tclAppInit.c:90

dgp added on 2004-03-16 01:35:49:

File Added - 80171: crash84.tcl

Attachments: