summaryrefslogtreecommitdiffstats
path: root/generic/tclExecute.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-01-18 15:39:21 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-01-18 15:39:21 (GMT)
commitf97560a94963b378ccc5b75e5dbc2949eca30b9f (patch)
tree9cab1970a2554690061d6b0cb437de08f09ffffa /generic/tclExecute.c
parent01a48e2369782044a30d922c5f8ed52262ef4fcd (diff)
parentc3bcd951b8dd8bf57202915b9d914bcddc73b9bb (diff)
downloadtcl-f97560a94963b378ccc5b75e5dbc2949eca30b9f.zip
tcl-f97560a94963b378ccc5b75e5dbc2949eca30b9f.tar.gz
tcl-f97560a94963b378ccc5b75e5dbc2949eca30b9f.tar.bz2
Fix [e9a2715d91]: Incompatible Tcl_GetRange(). From now on (unofficially) the last function argument can be set to -1 (or any negative value) meaning 'end'.
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r--generic/tclExecute.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index c39bc21..a3b0401 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -5609,7 +5609,11 @@ TEBCresume(
goto gotError;
}
- objResultPtr = Tcl_GetRange(OBJ_AT_DEPTH(2), fromIdx, toIdx);
+ if (toIdx < 0) {
+ TclNewObj(objResultPtr);
+ } else {
+ objResultPtr = Tcl_GetRange(OBJ_AT_DEPTH(2), fromIdx, toIdx);
+ }
TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr)));
NEXT_INST_V(1, 3, 1);
@@ -5653,11 +5657,14 @@ TEBCresume(
fromIdx = TCL_INDEX_START;
}
if (fromIdx == TCL_INDEX_AFTER) {
+ goto emptyRange;
+ }
+ fromIdx = TclIndexDecode(fromIdx, length - 1);
+ if (toIdx >= 0) {
+ objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx);
+ } else {
emptyRange:
TclNewObj(objResultPtr);
- } else {
- fromIdx = TclIndexDecode(fromIdx, length - 1);
- objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx);
}
TRACE_APPEND(("%.30s\n", O2S(objResultPtr)));
NEXT_INST_F(9, 1, 1);