Tcl Source Code

View Ticket
Login
Ticket UUID: e3f4a8b78dec4bdb549333f5373eee97c1020350
Title: Empty error message when interp limits are exceeded
Type: Bug Version: 8.6.6
Submitter: apnadkarni Created on: 2017-04-26 13:31:59
Subsystem: 20. [interp] Assigned To: dkf
Priority: 5 Medium Severity: Minor
Status: Open Last Modified: 2017-05-02 10:50:59
Resolution: None Closed By: nobody
    Closed on:
Description:
See the following console session

% interp create slave
slave
% set cmdlimit [slave eval {info cmdcount}]
280
% slave limit command -value [incr cmdlimit 5]
% slave limit time -seconds 600
% slave eval [list expr 1+3]

% set errorInfo

    while executing
"expr 1+3"
    invoked from within
"slave eval [list expr 1+3]"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 {slave eval [list expr 1+3]}"
% set errorCode
NONE

The time limit is in the past (it was actually a programming error, should have been absolute time, not relative). An error was generated as expected. However the error message is empty and error code is NONE (expected to be TCL LIMIT) resulting in my trap handler not firing.
User Comments: dkf added on 2017-05-02 10:50:59:

I reproduced this with the tip of the 8.6 branch:

interp create slave
set cmdlimit [slave eval {info cmdcount}]
slave limit command -value $cmdlimit
catch {slave eval [list expr 1+3]} msg1 opt1
puts «$msg1»
puts $opt1
catch {slave eval [list expr 1+3]} msg2 opt2
puts «$msg2»
puts $opt2
Output:
«command count limit exceeded»
-errorstack {INNER push1} -errorcode {TCL LIMIT COMMANDS} -errorinfo {command count limit exceeded
    while executing
"expr 1+3"
    invoked from within
"slave eval [list expr 1+3]"} -errorline 1 -code 1 -level 0
«»
-errorstack {INNER {expr 1+3}} -errorcode NONE -errorinfo {
    while executing
"expr 1+3"
    invoked from within
"slave eval [list expr 1+3]"} -errorline 1 -code 1 -level 0
Looks like it is a failure due to trying to run code in an environment where the trap has already fired.