summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorapnadkarni <apnmbx-wits@yahoo.com>2023-05-02 17:06:38 (GMT)
committerapnadkarni <apnmbx-wits@yahoo.com>2023-05-02 17:06:38 (GMT)
commit60ba166da0bc91417a234865af682e26ce85c368 (patch)
treec32d2d89db35020114817c812d9fb520779ba321
parent03d0f99e6ccaa554c9e7a7e3c9f71d7efb03e0f6 (diff)
parent2dccd2a5670532686cbe9da74ccf8e2ce591a20b (diff)
downloadtcl-60ba166da0bc91417a234865af682e26ce85c368.zip
tcl-60ba166da0bc91417a234865af682e26ce85c368.tar.gz
tcl-60ba166da0bc91417a234865af682e26ce85c368.tar.bz2
Merge 8.7 fix [784befb0ba] - tailcall crash
-rw-r--r--generic/tclCompCmdsSZ.c2
-rw-r--r--tests/tailcall.test7
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