diff options
author | griffin <briang42@easystreet.net> | 2023-07-16 00:24:54 (GMT) |
---|---|---|
committer | griffin <briang42@easystreet.net> | 2023-07-16 00:24:54 (GMT) |
commit | 56ca2a64d7665bc088790e6cfa134b39a7d0034f (patch) | |
tree | 597ac7400c26a4a7329c2ba7b38eece93ff0a2b2 /generic/tclTestABSList.c | |
parent | e10b5cb8b9d540f5ea378d7c705cd290d6c8156e (diff) | |
download | tcl-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.c | 15 |
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; } |