summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2020-05-25 07:48:15 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2020-05-25 07:48:15 (GMT)
commit2d7e36f00618d7f309c3970366b10fb888b83eea (patch)
tree6e0638346f0e1254b9f22ded8cf528551d2f5927
parent2b1daf9bb29fdba966f86c054d96d564b7539684 (diff)
downloadtcl-2d7e36f00618d7f309c3970366b10fb888b83eea.zip
tcl-2d7e36f00618d7f309c3970366b10fb888b83eea.tar.gz
tcl-2d7e36f00618d7f309c3970366b10fb888b83eea.tar.bz2
Fix "string is wordchar" in compiled case handling characters > U+FFFF. Adapt testcase exposing the problem.
-rw-r--r--generic/tclExecute.c6
-rw-r--r--tests/string.test2
2 files changed, 5 insertions, 3 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 5708772..cc366e7 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -5543,9 +5543,11 @@ TEBCresume(
ustring1 = Tcl_GetUnicodeFromObj(valuePtr, &length);
match = 1;
if (length > 0) {
+ int ch;
end = ustring1 + length;
- for (p=ustring1 ; p<end ; p++) {
- if (!tclStringClassTable[opnd].comparator(*p)) {
+ for (p=ustring1 ; p<end ; ) {
+ p += TclUniCharToUCS4(p, &ch);
+ if (!tclStringClassTable[opnd].comparator(ch)) {
match = 0;
break;
}
diff --git a/tests/string.test b/tests/string.test
index e68bbe3..184a555 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -778,7 +778,7 @@ test string-6.80.$noComp {string is wordchar, true} {
run {string is wordchar abc_123}
} 1
test string-6.81.$noComp {string is wordchar, unicode true} {
- run {string is wordchar abc\xFCab\xDCAB\u5001}
+ run {string is wordchar abc\xFCab\xDCAB\u5001\U1D7CA}
} 1
test string-6.82.$noComp {string is wordchar, false} {
list [run {string is wordchar -fail var abcd.ef}] $var