summaryrefslogtreecommitdiffstats
path: root/generic/tclEncoding.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-02-06 13:01:11 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-02-06 13:01:11 (GMT)
commit2fa0ec4d0bb7959063e94a0bd03962d40aeac38d (patch)
tree049d6f7c4be2f07fc954d88018d5aa41751fc89e /generic/tclEncoding.c
parent7fc88ec260bb481aed05458cf999aa3b812edb40 (diff)
downloadtcl-2fa0ec4d0bb7959063e94a0bd03962d40aeac38d.zip
tcl-2fa0ec4d0bb7959063e94a0bd03962d40aeac38d.tar.gz
tcl-2fa0ec4d0bb7959063e94a0bd03962d40aeac38d.tar.bz2
Proposed fix for [80d4c1c7e5]: Isolated surrogates are not replaced when encoding to / from utf-8
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r--generic/tclEncoding.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index d780299..63ebdf4 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2485,7 +2485,6 @@ UtfToUtfProc(
flags |= PTR2INT(clientData);
dstEnd = dst + dstLen - ((flags & ENCODING_UTF) ? TCL_UTF_MAX : 6);
-
profile = ENCODING_PROFILE_GET(flags);
for (numChars = 0; src < srcEnd && numChars <= charLimit; numChars++) {
@@ -2596,6 +2595,8 @@ UtfToUtfProc(
result = (flags & ENCODING_INPUT) ? TCL_CONVERT_SYNTAX : TCL_CONVERT_UNKNOWN;
src = saveSrc;
break;
+ } else if (PROFILE_REPLACE(profile) && SURROGATE(ch)) {
+ ch = UNICODE_REPLACE_CHAR;
}
dst += Tcl_UniCharToUtf(ch, dst);
}