summaryrefslogtreecommitdiffstats
path: root/generic/tclEncoding.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-12-20 09:32:22 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-12-20 09:32:22 (GMT)
commitac4faee2328d37860ec958ec755508713cbf6ea7 (patch)
tree2752d76cce05b470565efddcf8faf98b55ae0a64 /generic/tclEncoding.c
parent5db223f8ece1c31149d24e5ebddb1d2190aa62f6 (diff)
parentaf98d8fa201c3de5ef583d20e6eacb2d556c15bd (diff)
downloadtcl-ac4faee2328d37860ec958ec755508713cbf6ea7.zip
tcl-ac4faee2328d37860ec958ec755508713cbf6ea7.tar.gz
tcl-ac4faee2328d37860ec958ec755508713cbf6ea7.tar.bz2
Fix [17a1cb8d6e2a51bd]. From now on, noncharacters are no longer rejected in -strict mode
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r--generic/tclEncoding.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index f81b0eb..d10d9ca 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2468,13 +2468,12 @@ UtfToUtfProc(
src += len;
dst += Tcl_UniCharToUtf(ch, dst);
ch = low;
- } else if (STOPONERROR && !(flags & TCL_ENCODING_MODIFIED) && !Tcl_UniCharIsUnicode(ch)
- && (((ch & ~0x7FF) == 0xD800) || ((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT))) {
+ } else if (STOPONERROR && !(flags & TCL_ENCODING_MODIFIED) && (((ch & ~0x7FF) == 0xD800))) {
result = TCL_CONVERT_UNKNOWN;
src = saveSrc;
break;
} else if (((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT)
- && (flags & TCL_ENCODING_MODIFIED) && !Tcl_UniCharIsUnicode(ch)) {
+ && (flags & TCL_ENCODING_MODIFIED) && ((ch & ~0x7FF) == 0xD800)) {
result = TCL_CONVERT_SYNTAX;
src = saveSrc;
break;
@@ -2566,7 +2565,7 @@ Utf32ToUtfProc(
ch = (src[0] & 0xFF) << 24 | (src[1] & 0xFF) << 16 | (src[2] & 0xFF) << 8 | (src[3] & 0xFF);
}
if ((unsigned)ch > 0x10FFFF || (((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT)
- && !Tcl_UniCharIsUnicode(ch))) {
+ && ((ch & ~0x7FF) == 0xD800))) {
if (STOPONERROR) {
result = TCL_CONVERT_SYNTAX;
break;
@@ -2662,7 +2661,7 @@ UtfToUtf32Proc(
break;
}
len = TclUtfToUCS4(src, &ch);
- if (!Tcl_UniCharIsUnicode(ch) && (((ch & ~0x7FF) == 0xD800) || ((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT))) {
+ if ((ch & ~0x7FF) == 0xD800) {
if (STOPONERROR) {
result = TCL_CONVERT_UNKNOWN;
break;
@@ -2864,7 +2863,7 @@ UtfToUtf16Proc(
break;
}
len = TclUtfToUCS4(src, &ch);
- if (!Tcl_UniCharIsUnicode(ch) && (((ch & ~0x7FF) == 0xD800) || ((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT))) {
+ if ((ch & ~0x7FF) == 0xD800) {
if (STOPONERROR) {
result = TCL_CONVERT_UNKNOWN;
break;