Tcl Source Code

View Ticket
Login
Ticket UUID: 9dfae3413d66da5252296c923fff8a0bde59d45d
Title: interp limit commands still seems to be 32 bits
Type: Bug Version: 54eb90319d
Submitter: sbron Created on: 2025-06-25 20:47:02
Subsystem: 20. [interp] Assigned To: nobody
Priority: 5 Medium Severity: Important
Status: Open Last Modified: 2025-06-26 08:04:22
Resolution: None Closed By: nobody
    Closed on:
Description:

After running for quite some time, some interp in my program has executed 2147000000. As the interp doesn't seem to be misbehaving, I would like to increase its command limit by another 1000000. That results in an error: "command limit value must be at least 0" This happened on Tcl 8.6.14, so I thought to test in the latest 9.0 as that changed "everything" to 64 bits. But to my dismay I could still easily reproduce the error:

% [interp create] limit commands -value 2148000000
command limit value must be at least 0

The manual page for Tcl_LimitSetCommands() does indicate that commandLimit is of type Tcl_Size. But the reverse function, Tcl_LimitGetCommands() is still documented to return an int.

Diving into the source code, I see that Tcl_LimitGetCommands() actually returns a Tcl_Size, as I would have expected. However, I also find that ChildCommandLimitCmd() calls Tcl_LimitSetCommands() with variable limit, which is still an int!

User Comments: jan.nijtmans added on 2025-06-26 08:04:22:

Does this work better?


oehhar added on 2025-06-26 05:42:58:

Schelte, great catch. May I motivate you to work on a patch? Even if you refuse to write C code, it may be a start ;-)

Or what about a branch with a test case?

Thanks for all, Harald