diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-05-25 07:48:15 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-05-25 07:48:15 (GMT) |
commit | 2d7e36f00618d7f309c3970366b10fb888b83eea (patch) | |
tree | 6e0638346f0e1254b9f22ded8cf528551d2f5927 | |
parent | 2b1daf9bb29fdba966f86c054d96d564b7539684 (diff) | |
download | tcl-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.c | 6 | ||||
-rw-r--r-- | tests/string.test | 2 |
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 |