diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-01-21 14:44:58 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-01-21 14:44:58 (GMT) |
commit | d4e2ae119e3f6d6e5d430cf810ea4dc396ecd9b7 (patch) | |
tree | fd9daa54b6a510f3cb730698e505fe13f824b4e4 /generic/tclCmdMZ.c | |
parent | f97560a94963b378ccc5b75e5dbc2949eca30b9f (diff) | |
download | tcl-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/tclCmdMZ.c')
-rw-r--r-- | generic/tclCmdMZ.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index bf75d44..34fd6bf 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -394,14 +394,10 @@ Tcl_RegexpObjCmd( newPtr = Tcl_NewListObj(2, objs); } else { - if (i <= info.nsubs) { - if (info.matches[i].end <= 0) { - TclNewObj(newPtr); - } else { - newPtr = Tcl_GetRange(objPtr, - offset + info.matches[i].start, - offset + info.matches[i].end - 1); - } + if ((i <= info.nsubs) && (info.matches[i].end > 0)) { + newPtr = Tcl_GetRange(objPtr, + offset + info.matches[i].start, + offset + info.matches[i].end - 1); } else { TclNewObj(newPtr); } @@ -2187,7 +2183,13 @@ StringRangeCmd( return TCL_ERROR; } - if (last >= 0) { + if (first < 0) { + first = 0; + } + if (last >= length) { + last = length; + } + if (last >= first) { Tcl_SetObjResult(interp, Tcl_GetRange(objv[1], first, last)); } return TCL_OK; |