summaryrefslogtreecommitdiffstats
path: root/generic/tclParse.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-03-02 16:04:59 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-03-02 16:04:59 (GMT)
commitbfaca509637e46e0ffd48c20a60b78c617c7bf44 (patch)
tree4a8907259172a0e3fb26c1592c5f5a9c9169d90c /generic/tclParse.c
parentcc3041cee0463eae2d11f0125f3921b66f67497a (diff)
downloadtcl-bfaca509637e46e0ffd48c20a60b78c617c7bf44.zip
tcl-bfaca509637e46e0ffd48c20a60b78c617c7bf44.tar.gz
tcl-bfaca509637e46e0ffd48c20a60b78c617c7bf44.tar.bz2
Backport [bd94500678e837d7] from 8.7, preventing endless loops in UTF-8 conversions when handling surrogates. Only effective when compiling with -DTCL_UTF_MAX=4|6 (default: 3). Meant for benefit of Androwish.
Diffstat (limited to 'generic/tclParse.c')
-rw-r--r--generic/tclParse.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 74b02ce..1532c05 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -844,7 +844,7 @@ TclParseBackslash(
Tcl_UniChar unichar = 0;
int result;
int count;
- char buf[TCL_UTF_MAX];
+ char buf[TCL_UTF_MAX] = "";
if (numBytes == 0) {
if (readPtr != NULL) {
@@ -993,8 +993,8 @@ TclParseBackslash(
}
count = Tcl_UniCharToUtf(result, dst);
#if TCL_UTF_MAX > 3
- if (!count) {
- count = Tcl_UniCharToUtf(-1, dst);
+ if ((result >= 0xD800) && (count < 3)) {
+ count += Tcl_UniCharToUtf(-1, dst + count);
}
#endif
return count;
@@ -2217,7 +2217,7 @@ TclSubstTokens(
Tcl_Obj *appendObj = NULL;
const char *append = NULL;
int appendByteLength = 0;
- char utfCharBytes[TCL_UTF_MAX];
+ char utfCharBytes[TCL_UTF_MAX] = "";
switch (tokenPtr->type) {
case TCL_TOKEN_TEXT: