summaryrefslogtreecommitdiffstats
path: root/generic/tclParse.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2018-10-28 19:26:49 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2018-10-28 19:26:49 (GMT)
commitccb97d88ffefe602e7eb5a9610bd356d66bc2f20 (patch)
tree417cc58c53b8773c08262c85128c46225c4d2ea0 /generic/tclParse.c
parent3c4cc0a0013a0552c90518a995ae654571c18a5b (diff)
parentfd548863930daf0e1bc3d01286f542844b1cc69c (diff)
downloadtcl-ccb97d88ffefe602e7eb5a9610bd356d66bc2f20.zip
tcl-ccb97d88ffefe602e7eb5a9610bd356d66bc2f20.tar.gz
tcl-ccb97d88ffefe602e7eb5a9610bd356d66bc2f20.tar.bz2
Merge 8.7
Diffstat (limited to 'generic/tclParse.c')
-rw-r--r--generic/tclParse.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 8a28bf2..00b83a1 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -829,7 +829,7 @@ TclParseBackslash(
* written there. */
{
register const char *p = src+1;
- Tcl_UniChar unichar;
+ Tcl_UniChar unichar = 0;
int result;
int count;
char buf[TCL_UTF_MAX];
@@ -963,13 +963,13 @@ TclParseBackslash(
*/
if (Tcl_UtfCharComplete(p, numBytes - 1)) {
- count = Tcl_UtfToUniChar(p, &unichar) + 1; /* +1 for '\' */
+ count = TclUtfToUniChar(p, &unichar) + 1; /* +1 for '\' */
} else {
char utfBytes[TCL_UTF_MAX];
memcpy(utfBytes, p, (size_t) (numBytes - 1));
utfBytes[numBytes - 1] = '\0';
- count = Tcl_UtfToUniChar(utfBytes, &unichar) + 1;
+ count = TclUtfToUniChar(utfBytes, &unichar) + 1;
}
result = unichar;
break;
@@ -979,7 +979,12 @@ TclParseBackslash(
if (readPtr != NULL) {
*readPtr = count;
}
- return Tcl_UniCharToUtf(result, dst);
+ count = Tcl_UniCharToUtf(result, dst);
+ if (!count) {
+ /* Special case for handling upper surrogates. */
+ count = Tcl_UniCharToUtf(-1, dst);
+ }
+ return count;
}
/*