summaryrefslogtreecommitdiffstats
path: root/generic/tclEncoding.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-01-28 20:50:36 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-01-28 20:50:36 (GMT)
commit5b86b255d41b6a0948597ccc8b7499efde42c4d7 (patch)
treeccfc14f39b5c096c76e2b1ec43ac4c91daa5c6f8 /generic/tclEncoding.c
parent468b1a434681f98ea64d399abce7ddd8c605617d (diff)
downloadtcl-5b86b255d41b6a0948597ccc8b7499efde42c4d7.zip
tcl-5b86b255d41b6a0948597ccc8b7499efde42c4d7.tar.gz
tcl-5b86b255d41b6a0948597ccc8b7499efde42c4d7.tar.bz2
Another situation where TCL_COMBINE handling gives a strange result (utf-32 encoder)
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r--generic/tclEncoding.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index e548663..46508b7 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2505,8 +2505,14 @@ Utf32ToUtfProc(
} else {
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)
- && ((ch & ~0x7FF) == 0xD800))) {
+ if ((unsigned)ch > 0x10FFFF) {
+ if (STOPONERROR) {
+ result = TCL_CONVERT_SYNTAX;
+ break;
+ }
+ ch = 0xFFFD;
+ } else if (((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT)
+ && ((ch & ~0x7FF) == 0xD800)) {
if (STOPONERROR) {
result = TCL_CONVERT_SYNTAX;
break;