#1076 panic in [expr + {[incr]}]

obsolete: 8.2.2
closed-fixed
nobody
2
2000-10-26
2000-10-26
Anonymous
No

OriginalBugID: 3736 Bug
Version: 8.2.2
SubmitDate: '1999-12-01'
LastModified: '1999-12-01'
Severity: CRIT
Status: Released
Submitter: techsupp
ChangedBy: hobbs
OS: All
FixedDate: '1999-12-01'
FixedInVersion: 8.2.3
ClosedDate: '2000-10-25'

Name:

Don Porter

CVS:

$Id: tclCompile.c,v 1.17 1999/10/21 02:16:22 hobbs Exp $

ObservedBehavior:

% expr + {[incr]}

GetCmdLocEncodingSize: bad code length

Abort

DesiredBehavior:

% expr + {[incr]}

wrong # args: should be "incr varName ?increment?"

Patch:

Index: generic/tclCompile.c

===================================================================

RCS file: /cvsroot/tcl/generic/tclCompile.c,v

retrieving revision 1.17

diff -c -r1.17 tclCompile.c

*** tclCompile.c 1999/10/21 02:16:22 1.17

--- tclCompile.c 1999/12/01 15:48:34

***************

*** 882,887 ****

--- 882,896 ----

} else if (code == TCL_OUT_LINE_COMPILE) {

/* do nothing */

} else { /* an error */

+

+ /* Since there was a compilation error,

+ * the last command did not get compiled

+ * into (*envPtr). We must decrement

+ * the number of commands claimed to be

+ * in (*envPtr).

+ */

+

+ envPtr->numCommands--;

goto error;

}

}

Index: tests/expr.test

===================================================================

RCS file: /cvsroot/tcl/tests/expr.test,v

retrieving revision 1.6

diff -c -r1.6 expr.test

*** expr.test 1999/08/19 03:00:13 1.6

--- expr.test 1999/12/01 15:48:37

***************

*** 711,716 ****

--- 711,719 ----

set a yellow

expr 1?{$a}:0

} yellow

+ test expr-20.6 {handling of compile error in trial compile} {

+ list [catch {expr + {[incr]}} msg] $msg

+ } {1 {wrong # args: should be "incr varName ?increment?"}}

# cleanup

if {[info exists a]} {

PatchFiles:

generic/tclCompile.c

tests/expr.test

Fix will be in 8.2.3.
-- 12/01/1999 hobbs

Discussion

  • Brent B. Welch
    Brent B. Welch
    2000-10-26

    • priority: 5 --> 2
    • status: open --> closed-fixed