diff options
author | apnadkarni <apnmbx-wits@yahoo.com> | 2023-05-02 17:06:38 (GMT) |
---|---|---|
committer | apnadkarni <apnmbx-wits@yahoo.com> | 2023-05-02 17:06:38 (GMT) |
commit | 60ba166da0bc91417a234865af682e26ce85c368 (patch) | |
tree | c32d2d89db35020114817c812d9fb520779ba321 | |
parent | 03d0f99e6ccaa554c9e7a7e3c9f71d7efb03e0f6 (diff) | |
parent | 2dccd2a5670532686cbe9da74ccf8e2ce591a20b (diff) | |
download | tcl-60ba166da0bc91417a234865af682e26ce85c368.zip tcl-60ba166da0bc91417a234865af682e26ce85c368.tar.gz tcl-60ba166da0bc91417a234865af682e26ce85c368.tar.bz2 |
Merge 8.7 fix [784befb0ba] - tailcall crash
-rw-r--r-- | generic/tclCompCmdsSZ.c | 2 | ||||
-rw-r--r-- | tests/tailcall.test | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/generic/tclCompCmdsSZ.c b/generic/tclCompCmdsSZ.c index 531fbf0..05d50e9 100644 --- a/generic/tclCompCmdsSZ.c +++ b/generic/tclCompCmdsSZ.c @@ -2669,7 +2669,7 @@ TclCompileTailcallCmd( Tcl_Token *tokenPtr = parsePtr->tokenPtr; int i; - if (parsePtr->numWords < 2 || parsePtr->numWords > 256 + if (parsePtr->numWords < 2 || parsePtr->numWords >= 256 || envPtr->procPtr == NULL) { return TCL_ERROR; } diff --git a/tests/tailcall.test b/tests/tailcall.test index c738bb3..c9ec674 100644 --- a/tests/tailcall.test +++ b/tests/tailcall.test @@ -708,6 +708,13 @@ test tailcall-14.1-bc {{in a deleted namespace} {byte compiled}} -body { } } -returnCodes 1 -result {namespace "::ns" not found} +test tailcall-bug-784befb0ba {tailcall crash with 254 args} -body { + proc tccrash args {llength $args} + # Must be EXACTLY 254 for crash + proc p {} [list tailcall tccrash {*}[lrepeat 254 x]] + p +} -result 254 + # cleanup ::tcltest::cleanupTests |