diff options
| author | apnadkarni <apnmbx-wits@yahoo.com> | 2023-04-26 14:56:21 (GMT) |
|---|---|---|
| committer | apnadkarni <apnmbx-wits@yahoo.com> | 2023-04-26 14:56:21 (GMT) |
| commit | 5ddcd8fea990af78cce1ef7d706e0a0ce81a317b (patch) | |
| tree | 316e5bcda1d720300409a35f4bb478e86bbdc44a | |
| parent | 025b74f7c7add01c5ca6654b03c29241c0845def (diff) | |
| download | tcl-5ddcd8fea990af78cce1ef7d706e0a0ce81a317b.zip tcl-5ddcd8fea990af78cce1ef7d706e0a0ce81a317b.tar.gz tcl-5ddcd8fea990af78cce1ef7d706e0a0ce81a317b.tar.bz2 | |
Fix for [7cddd2845c] (in progress)
| -rw-r--r-- | generic/tclExecute.c | 20 | ||||
| -rw-r--r-- | tests/bigdata.test | 20 |
2 files changed, 35 insertions, 5 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c index 31a8695..1e16d68 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -981,10 +981,10 @@ GrowEvaluationStack( { ExecStack *esPtr = eePtr->execStackPtr, *oldPtr = NULL; size_t newBytes; - int growth = growth1; - int newElems, currElems, needed = growth - (esPtr->endPtr - esPtr->tosPtr); + Tcl_Size growth = growth1; + Tcl_Size newElems, currElems, needed = growth - (esPtr->endPtr - esPtr->tosPtr); Tcl_Obj **markerPtr = esPtr->markerPtr, **memStart; - int moveWords = 0; + Tcl_Size moveWords = 0; if (move) { if (!markerPtr) { @@ -2825,8 +2825,20 @@ TEBCresume( pc += pcAdjustment; TEBC_YIELD(); - return TclNREvalObjv(interp, objc, objv, + if (objc > INT_MAX) { + if (interp) { + Tcl_SetObjResult( + interp, + Tcl_ObjPrintf("Argument count %" TCL_SIZE_MODIFIER + "d exceeds limit %d.", + objc, + (int)INT_MAX)); + } + return TCL_ERROR; + } else { + return TclNREvalObjv(interp, objc, objv, TCL_EVAL_NOERR | TCL_EVAL_SOURCE_IN_FRAME, NULL); + } case INST_INVOKE_REPLACE: objc = TclGetUInt4AtPtr(pc+1); diff --git a/tests/bigdata.test b/tests/bigdata.test index c02d8e3..87c5a59 100644 --- a/tests/bigdata.test +++ b/tests/bigdata.test @@ -879,7 +879,8 @@ bigtest linsert-bigdata-1 "linsert" {4294967330 1} -body { # # list and {*} -bigtestRO list-bigdata-1 {list {*} } {4294967296 0 4294967295} -body { +# TODO - compiled and uncompiled behave differently so tested separately +bigtestRO xxlist-bigdata-1 {list {*} } {4294967296 0 4294967295} -body { unset -nocomplain l2 set l2 [list {*}$l] list [llength $l2] [lindex $l2 0] [lindex $l2 end] @@ -888,6 +889,23 @@ bigtestRO list-bigdata-1 {list {*} } {4294967296 0 4294967295} -body { } -cleanup { bigClean } -constraints bug-7cddd2845c +test list-bigdata-1.compiled {list {*} } -body { + set l [bigList 0x100000000] + set l2 [list {*}$l] + unset l + list [llength $l2] [lindex $l2 0] [lindex $l2 end] +} -cleanup { + bigClean +} -result {4294967296 0 5} +test list-bigdata-1.uncompiled {list {*} } -body { + set l [bigList 0x7fffffff] + testevalex {set l2 [list {*}$l]} + unset l + list [llength $l2] [lindex $l2 0] [lindex $l2 end] +} -cleanup { + bigClean +} -result {4294967296 0 5} + # # llength |
