summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-02-06 22:43:30 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-02-06 22:43:30 (GMT)
commitf5f5ff4257a24b2e8a8d96c820f6874c86e81304 (patch)
treec35eaa75e3883dfc93d8992148e44ab09649cdd8
parentde0a637d7c24faa768c266bacda17bf6ac48171d (diff)
downloadtcl-f5f5ff4257a24b2e8a8d96c820f6874c86e81304.zip
tcl-f5f5ff4257a24b2e8a8d96c820f6874c86e81304.tar.gz
tcl-f5f5ff4257a24b2e8a8d96c820f6874c86e81304.tar.bz2
Proposed fix for [10c2c17c32]: UTF-LE32 encoder mapping of surrogates. TODO: testcase
-rw-r--r--generic/tclEncoding.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index 288b07c..d19e237 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2582,6 +2582,10 @@ Utf32ToUtfProc(
*dst++ = (ch & 0xFF);
} else {
dst += Tcl_UniCharToUtf(ch, dst);
+ if ((ch & ~0x3FF) == 0xD800) {
+ /* Bug [10c2c17c32]. If Hi surrogate, finish 3-byte UTF-8 */
+ dst += Tcl_UniCharToUtf(-1, dst);
+ }
}
src += sizeof(unsigned int);
}