From bc2704655159b853d5d495486d75048f9222bfa7 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 28 Jun 2023 07:15:59 +0000 Subject: Fix [78b9b6860c]: Please sync tclOOScript.h --- generic/tclOOScript.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index b7c1f1d..eb6a96e 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -164,12 +164,13 @@ static const char *tclOOSetupScript = "\t\tmethod -appendifnew -export args {\n" "\t\t\tset my [namespace which my]\n" "\t\t\tset current [uplevel 1 [list $my Get]]\n" -"\t\t\tset args [lmap a $args {\n" +"\t\t\tforeach a $args {\n" "\t\t\t\tset a [uplevel 1 [list $my Resolve $a]]\n" -"\t\t\t\tif {$a in $current} continue\n" -"\t\t\t\tset a\n" -"\t\t\t}]\n" -"\t\t\ttailcall my Set [list {*}$current {*}$args]\n" +"\t\t\t\tif {$a ni $current} {\n" +"\t\t\t\t\tlappend current $a\n" +"\t\t\t\t}\n" +"\t\t\t}\n" +"\t\t\ttailcall my Set $current\n" "\t\t}\n" "\t\tmethod -clear -export {} {tailcall my Set {}}\n" "\t\tmethod -prepend -export args {\n" -- cgit v0.12 From 26aa7dd45392f4d572e252286f9e3ec546fe6037 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 28 Jun 2023 07:20:18 +0000 Subject: Fix [26960060d7]: lseq-3.14 triggers use-after-free --- generic/tclListObj.c | 1 + tests/lseq.test | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/generic/tclListObj.c b/generic/tclListObj.c index 0fd489c..6ca6a51 100644 --- a/generic/tclListObj.c +++ b/generic/tclListObj.c @@ -3274,6 +3274,7 @@ SetListFromAny( if (elemPtrs[j] == NULL) { return TCL_ERROR; } + Tcl_IncrRefCount(elemPtrs[j]); } } else { diff --git a/tests/lseq.test b/tests/lseq.test index b8ae2e9..765d1e2 100644 --- a/tests/lseq.test +++ b/tests/lseq.test @@ -542,6 +542,12 @@ test lseq-4.9 {error case lrange} -body { } -returnCodes 1 \ -result {index 7 is out of bounds 0 to 4} +test lseq-convertToList {does not result in a memory error} { + trace add variable var1 write [list ::apply [list args { + error {this is an error} + } [namespace current]]] + list [catch {set var1 [lindex [lreplace [lseq 1 2] 1 1 hello] 0]} cres] $cres +} {1 {can't set "var1": this is an error}} # cleanup ::tcltest::cleanupTests -- cgit v0.12