From 85233a46935b192d7baf5fa81c9ad21bfebeca77 Mon Sep 17 00:00:00 2001 From: dgp Date: Fri, 23 Feb 2018 16:55:49 +0000 Subject: [8e6a9ac221] Stop false matching with bytearrays. (string-11.55) --- generic/tclUtil.c | 3 ++- tests/string.test | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 -- cgit v0.12