diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-01-28 20:50:36 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-01-28 20:50:36 (GMT) |
commit | 5b86b255d41b6a0948597ccc8b7499efde42c4d7 (patch) | |
tree | ccfc14f39b5c096c76e2b1ec43ac4c91daa5c6f8 /generic/tclEncoding.c | |
parent | 468b1a434681f98ea64d399abce7ddd8c605617d (diff) | |
download | tcl-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.c | 10 |
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; |