summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
Diffstat (limited to 'generic')
-rw-r--r--generic/tclStringObj.c2
-rw-r--r--generic/tclTestObj.c18
2 files changed, 16 insertions, 4 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index 2fbf854..13d91d9 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -1046,7 +1046,7 @@ Tcl_GetRange(
int numChars = Tcl_NumUtfChars(objPtr->bytes, objPtr->length);
- if (last >= numChars) {
+ if (last < 0 || last >= numChars) {
last = numChars - 1;
}
if (last < first) {
diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c
index 223eb98..a03a60a 100644
--- a/generic/tclTestObj.c
+++ b/generic/tclTestObj.c
@@ -1164,7 +1164,7 @@ TeststringobjCmd(
Tcl_Obj **varPtr;
static const char *const options[] = {
"append", "appendstrings", "get", "get2", "length", "length2",
- "set", "set2", "setlength", "maxchars", "appendself",
+ "set", "set2", "setlength", "maxchars", "range", "appendself",
"appendself2", NULL
};
@@ -1335,7 +1335,19 @@ TeststringobjCmd(
}
Tcl_SetWideIntObj(Tcl_GetObjResult(interp), length);
break;
- case 10: /* appendself */
+ case 10: { /* range */
+ int first, last;
+ if (objc != 5) {
+ goto wrongNumArgs;
+ }
+ if ((Tcl_GetIntFromObj(interp, objv[3], &first) != TCL_OK)
+ || (Tcl_GetIntFromObj(interp, objv[4], &last) != TCL_OK)) {
+ return TCL_ERROR;
+ }
+ Tcl_SetObjResult(interp, Tcl_GetRange(varPtr[varIndex], first, last));
+ break;
+ }
+ case 11: /* appendself */
if (objc != 4) {
goto wrongNumArgs;
}
@@ -1366,7 +1378,7 @@ TeststringobjCmd(
Tcl_AppendToObj(varPtr[varIndex], string + length, size - length);
Tcl_SetObjResult(interp, varPtr[varIndex]);
break;
- case 11: /* appendself2 */
+ case 12: /* appendself2 */
if (objc != 4) {
goto wrongNumArgs;
}