summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2020-07-10 07:26:55 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2020-07-10 07:26:55 (GMT)
commit0fab7463a3318c4fb204e1d463c34ca2616bf201 (patch)
tree00d2093e38b942a3c50b3a70814328081a155445
parent1dfea026b838bf256caed3e3266f5d310f289a35 (diff)
downloadtcl-0fab7463a3318c4fb204e1d463c34ca2616bf201.zip
tcl-0fab7463a3318c4fb204e1d463c34ca2616bf201.tar.gz
tcl-0fab7463a3318c4fb204e1d463c34ca2616bf201.tar.bz2
Addendum to [60fab362ce]: "Also don't allow surrogates in \U??????". This change was only meant for builds with TCL_UTF_MAX > 3.
-rw-r--r--generic/tclParse.c2
-rw-r--r--tests/utf.test4
2 files changed, 4 insertions, 2 deletions
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 78f3a9e..7a51dae 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -942,9 +942,11 @@ TclParseBackslash(
* No hexdigits -> This is just "U".
*/
result = 'U';
+#if TCL_UTF_MAX > 3
} else if ((result & ~0x7FF) == 0xD800) {
/* Upper or lower surrogate, not allowed in this syntax. */
result = 0xFFFD;
+#endif
}
break;
case '\n':
diff --git a/tests/utf.test b/tests/utf.test
index 14b2198..2f5f7f3 100644
--- a/tests/utf.test
+++ b/tests/utf.test
@@ -78,8 +78,8 @@ test utf-1.11 {Tcl_UniCharToUtf: 3 byte sequence, low surrogate} testbytestring
test utf-1.12 {Tcl_UniCharToUtf: 4 byte sequence, high/low surrogate} {pairsTo4bytes testbytestring} {
expr {"\uD842\uDC42" eq [testbytestring \xF0\xA0\xA1\x82]}
} 1
-test utf-1.13 {Tcl_UniCharToUtf: Invalid surrogate} {Uesc testbytestring} {
- expr {"\UD842" eq [testbytestring \xEF\xBF\xBD]}
+test utf-1.13 {Tcl_UniCharToUtf: Invalid surrogate} Uesc {
+ expr {"\UD842" eq "\uD842"}
} 1
test utf-2.1 {Tcl_UtfToUniChar: low ascii} {