summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2018-02-23 16:55:49 (GMT)
committerdgp <dgp@users.sourceforge.net>2018-02-23 16:55:49 (GMT)
commit85233a46935b192d7baf5fa81c9ad21bfebeca77 (patch)
tree7a40c869d6db73a096af09bd6033e49b1810cec0
parent189d0a83d2df3b9f47e30232bdf377d4daeaba2b (diff)
downloadtcl-85233a46935b192d7baf5fa81c9ad21bfebeca77.zip
tcl-85233a46935b192d7baf5fa81c9ad21bfebeca77.tar.gz
tcl-85233a46935b192d7baf5fa81c9ad21bfebeca77.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 34d4be2..d782ea1 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -2340,7 +2340,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 7a7a749..39abd86 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -1111,6 +1111,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