summaryrefslogtreecommitdiffstats
path: root/generic/tclExecute.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-01-21 14:44:58 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-01-21 14:44:58 (GMT)
commitd4e2ae119e3f6d6e5d430cf810ea4dc396ecd9b7 (patch)
treefd9daa54b6a510f3cb730698e505fe13f824b4e4 /generic/tclExecute.c
parentf97560a94963b378ccc5b75e5dbc2949eca30b9f (diff)
downloadtcl-d4e2ae119e3f6d6e5d430cf810ea4dc396ecd9b7.zip
tcl-d4e2ae119e3f6d6e5d430cf810ea4dc396ecd9b7.tar.gz
tcl-d4e2ae119e3f6d6e5d430cf810ea4dc396ecd9b7.tar.bz2
Undo part of [26539e78a7]. Although Tcl_GetRange() does it's own parameter check, it's caller doesn't have to do it any more. However, put back these check, better not depend on the improved behavior of Tcl_GetRange (yet). This gives the freedom to bring back Tcl_GetRange() to how it was in Tcl 8.6.10, if desired
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r--generic/tclExecute.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index a3b0401..e5a6b71 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -5609,10 +5609,16 @@ TEBCresume(
goto gotError;
}
- if (toIdx < 0) {
- TclNewObj(objResultPtr);
- } else {
+ if (fromIdx < 0) {
+ fromIdx = 0;
+ }
+ if (toIdx >= length) {
+ toIdx = length;
+ }
+ if (toIdx >= fromIdx) {
objResultPtr = Tcl_GetRange(OBJ_AT_DEPTH(2), fromIdx, toIdx);
+ } else {
+ TclNewObj(objResultPtr);
}
TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr)));
NEXT_INST_V(1, 3, 1);
@@ -5646,6 +5652,13 @@ TEBCresume(
}
toIdx = TclIndexDecode(toIdx, length - 1);
+ if (toIdx < 0) {
+ goto emptyRange;
+ } else if (toIdx >= length) {
+ toIdx = length - 1;
+ }
+
+ assert ( toIdx >= 0 && toIdx < length );
/*
assert ( fromIdx != TCL_INDEX_BEFORE );
@@ -5659,8 +5672,13 @@ TEBCresume(
if (fromIdx == TCL_INDEX_AFTER) {
goto emptyRange;
}
+
fromIdx = TclIndexDecode(fromIdx, length - 1);
- if (toIdx >= 0) {
+ if (fromIdx < 0) {
+ fromIdx = 0;
+ }
+
+ if (fromIdx <= toIdx) {
objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx);
} else {
emptyRange: