summaryrefslogtreecommitdiffstats
path: root/generic/tclTestABSList.c
diff options
context:
space:
mode:
authorgriffin <briang42@easystreet.net>2023-07-16 00:24:54 (GMT)
committergriffin <briang42@easystreet.net>2023-07-16 00:24:54 (GMT)
commit56ca2a64d7665bc088790e6cfa134b39a7d0034f (patch)
tree597ac7400c26a4a7329c2ba7b38eece93ff0a2b2 /generic/tclTestABSList.c
parente10b5cb8b9d540f5ea378d7c705cd290d6c8156e (diff)
downloadtcl-56ca2a64d7665bc088790e6cfa134b39a7d0034f.zip
tcl-56ca2a64d7665bc088790e6cfa134b39a7d0034f.tar.gz
tcl-56ca2a64d7665bc088790e6cfa134b39a7d0034f.tar.bz2
Fix bug [c25d2cd3e6], as well as memory leaks in lsearch and concat.
Add cleanup to some tests. Fix bug and leak in tclTestABSList.c Correct comment in tclArithSeries.c
Diffstat (limited to 'generic/tclTestABSList.c')
-rw-r--r--generic/tclTestABSList.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/generic/tclTestABSList.c b/generic/tclTestABSList.c
index f9f2fda..7ac6308 100644
--- a/generic/tclTestABSList.c
+++ b/generic/tclTestABSList.c
@@ -361,7 +361,6 @@ my_LStringObjSetElem(
{
LString *lstringRepPtr = (LString*)lstringObj->internalRep.twoPtrValue.ptr1;
Tcl_Size index;
- const char *newvalue;
int status;
Tcl_Obj *returnObj;
@@ -385,8 +384,17 @@ my_LStringObjSetElem(
lstringRepPtr->string = (char*)Tcl_Realloc(lstringRepPtr->string, lstringRepPtr->strlen+1);
}
- newvalue = Tcl_GetString(valueObj);
- lstringRepPtr->string[index] = newvalue[0];
+ if (valueObj) {
+ const char newvalue = Tcl_GetString(valueObj)[0];
+ lstringRepPtr->string[index] = newvalue;
+ } else if (index < lstringRepPtr->strlen) {
+ /* Remove the char by sliding the tail of the string down */
+ char *sptr = &lstringRepPtr->string[index];
+ /* This is an overlapping copy, by definition */
+ lstringRepPtr->strlen--;
+ memmove(sptr, (sptr+1), (lstringRepPtr->strlen - index));
+ }
+ // else do nothing
Tcl_InvalidateStringRep(returnObj);
@@ -684,6 +692,7 @@ my_NewLStringObj(
i++;
}
if (i != objc-1) {
+ Tcl_Free((char*)lstringRepPtr);
Tcl_WrongNumArgs(interp, 0, objv, "lstring string");
return NULL;
}