summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2018-02-23 17:00:03 (GMT)
committerdgp <dgp@users.sourceforge.net>2018-02-23 17:00:03 (GMT)
commit468041eef83fe018271ded25cba571f57372fe7f (patch)
treef3de5c0dc60e9b23de83f9fdad51e6704d30b6c2
parent455b61dce391118995a7762609a6f42035cf43a4 (diff)
parent85233a46935b192d7baf5fa81c9ad21bfebeca77 (diff)
downloadtcl-468041eef83fe018271ded25cba571f57372fe7f.zip
tcl-468041eef83fe018271ded25cba571f57372fe7f.tar.gz
tcl-468041eef83fe018271ded25cba571f57372fe7f.tar.bz2
[8e6a9ac221] Stop false matching with bytearrays. (string-11.55)
-rw-r--r--generic/tclUtil.c3
-rw-r--r--tests/string.test3
2 files changed, 5 insertions, 1 deletions
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index 396f992..3424295 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -2530,7 +2530,8 @@ TclStringMatchObj(
udata = Tcl_GetUnicodeFromObj(strObj, &length);
uptn = Tcl_GetUnicodeFromObj(ptnObj, &plen);
match = TclUniCharMatch(udata, length, uptn, plen, flags);
- } else if (TclIsPureByteArray(strObj) && !flags) {
+ } else if (TclIsPureByteArray(strObj) && TclIsPureByteArray(ptnObj)
+ && !flags) {
unsigned char *data, *ptn;
data = Tcl_GetByteArrayFromObj(strObj, &length);
diff --git a/tests/string.test b/tests/string.test
index 53f1cfb..fc8dabb 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -1192,6 +1192,9 @@ test string-11.54 {string match, failure} {
[string match *a*l*\u0000*cba* $longString] \
[string match *===* $longString]
} {0 1 1 1 0 0}
+test string-11.55 {string match, invalid binary optimization} {
+ [format string] match \u0141 [binary format c 65]
+} 0
test string-12.1 {string range} {
list [catch {string range} msg] $msg