summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2022-09-21 13:22:05 (GMT)
committerdgp <dgp@users.sourceforge.net>2022-09-21 13:22:05 (GMT)
commit3116cddfd5a6ddf1325ff4d1f2cad66226ec0c79 (patch)
tree8c71caa333db89e53ea10fac754d5e18278cfefd
parentf5300c9a093e59dd06b0c2dd96956d1887836771 (diff)
parent0f53e9d9697ee1bf84f6fdba09ec752711484f85 (diff)
downloadtcl-3116cddfd5a6ddf1325ff4d1f2cad66226ec0c79.zip
tcl-3116cddfd5a6ddf1325ff4d1f2cad66226ec0c79.tar.gz
tcl-3116cddfd5a6ddf1325ff4d1f2cad66226ec0c79.tar.bz2
merge 8.6
-rw-r--r--generic/tclCmdMZ.c8
-rw-r--r--tests/switch.test7
2 files changed, 13 insertions, 2 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 3ff9947..53e12c5 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -3930,8 +3930,12 @@ TclNRSwitchObjCmd(
if (matchVarObj != NULL) {
Tcl_Obj *substringObj;
- substringObj = Tcl_GetRange(stringObj,
- info.matches[j].start, info.matches[j].end-1);
+ if (info.matches[j].end > 0) {
+ substringObj = Tcl_GetRange(stringObj,
+ info.matches[j].start, info.matches[j].end-1);
+ } else {
+ TclNewObj(substringObj);
+ }
/*
* Never fails; the object is always clean at this point.
diff --git a/tests/switch.test b/tests/switch.test
index 8ca049c..a7211cb 100644
--- a/tests/switch.test
+++ b/tests/switch.test
@@ -745,6 +745,13 @@ test switch-14.16 {switch -regexp compilation} {
}
}}
} no
+test switch-14.17 {switch -regexp bug [c0bc269178]} {
+ set result {}
+ switch -regexp -matchvar m -indexvar i ac {
+ {(a)(b)?(c)} {set result $m}
+ }
+ set result
+} {ac a {} c}
test switch-15.1 {coroutine safety of non-bytecoded switch} {*}{
-body {