summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclUtf.c4
-rw-r--r--tests/utf.test8
2 files changed, 9 insertions, 3 deletions
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index 02952cb..712beaa 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -1398,6 +1398,7 @@ UCS4ToUpper(
ch -= GetDelta(info);
}
}
+ /* Clear away extension bits, if any */
return ch & 0x1FFFFF;
}
@@ -1436,6 +1437,7 @@ UCS4ToLower(
ch += GetDelta(info);
}
}
+ /* Clear away extension bits, if any */
return ch & 0x1FFFFF;
}
@@ -1482,6 +1484,7 @@ UCS4ToTitle(
ch -= GetDelta(info);
}
}
+ /* Clear away extension bits, if any */
return ch & 0x1FFFFF;
}
@@ -1681,6 +1684,7 @@ Tcl_UniCharIsControl(
{
#if TCL_UTF_MAX > 3
if (UNICODE_OUT_OF_RANGE(ch)) {
+ /* Clear away extension bits, if any */
ch &= 0x1FFFFF;
if ((ch == 0xE0001) || ((ch >= 0xE0020) && (ch <= 0xE007F))) {
return 1;
diff --git a/tests/utf.test b/tests/utf.test
index 6757608..77fb8d7 100644
--- a/tests/utf.test
+++ b/tests/utf.test
@@ -1336,7 +1336,7 @@ test utf-19.1 {TclUniCharLen} -body {
unset -nocomplain foo
} -result {1 4}
-test utf-20.1 {TclUniCharNcmp} {fullutf knownBug} {
+test utf-20.1 {TclUniCharNcmp} {ucs4} {
string compare [string range [format %c 0xFFFF] 0 0] [string range [format %c 0x10000] 0 0]
} -1
@@ -1457,8 +1457,10 @@ UniCharCaseCmpTest < a b
UniCharCaseCmpTest > b a
UniCharCaseCmpTest > B a
UniCharCaseCmpTest > aBcB abca
-UniCharCaseCmpTest < \uFFFF [format %c 0x10000] {fullutf knownBug}
-UniCharCaseCmpTest < \uFFFF \U10000 {Uesc fullutf knownBug}
+UniCharCaseCmpTest < \uFFFF [format %c 0x10000] ucs4
+UniCharCaseCmpTest < \uFFFF \U10000 {Uesc ucs4}
+UniCharCaseCmpTest > [format %c 0x10000] \uFFFF ucs4
+UniCharCaseCmpTest > \U10000 \uFFFF {Uesc ucs4}