summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-12-08 16:33:18 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-12-08 16:33:18 (GMT)
commitd67affb10098d8289d0fd12a5ea738068740ef39 (patch)
tree5f47e0b599589945cf71b5418afd157c85e96544 /generic
parentbf4f51ce7866dc5c5ce3acf483636f7a281e3d18 (diff)
downloadtcl-d67affb10098d8289d0fd12a5ea738068740ef39.zip
tcl-d67affb10098d8289d0fd12a5ea738068740ef39.tar.gz
tcl-d67affb10098d8289d0fd12a5ea738068740ef39.tar.bz2
Fix Valgrind problem reported as follow-up in [fc4393e9b0]. Since it happens only for TCL_UTF_MAX>3 it's not actully a 'bug' in 8.6, but it might be a corner-case not handled well in 8.7
Diffstat (limited to 'generic')
-rw-r--r--generic/tclEncoding.c4
-rw-r--r--generic/tclExecute.c2
-rw-r--r--generic/tclStringObj.c4
3 files changed, 5 insertions, 5 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index e080d6e..69075bd 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2361,11 +2361,11 @@ UtfToUtfProc(
dst += Tcl_UniCharToUtf(*chPtr, dst);
} else {
src += TclUtfToUniChar(src, chPtr);
- if ((*chPtr & 0xFC00) == 0xD800) {
+ if ((*chPtr | 0x3FF) == 0xDBFF) {
/* A high surrogate character is detected, handle especially */
Tcl_UniChar low = *chPtr;
size_t len = (src <= srcEnd-3) ? Tcl_UtfToUniChar(src, &low) : 0;
- if ((low & 0xFC00) != 0xDC00) {
+ if ((low | 0x3FF) != 0xDFFF) {
*dst++ = (char) (((*chPtr >> 12) | 0xE0) & 0xEF);
*dst++ = (char) (((*chPtr >> 6) | 0x80) & 0xBF);
*dst++ = (char) ((*chPtr | 0x80) & 0xBF);
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 6394eea..20e2c34 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -5544,7 +5544,7 @@ TEBCresume(
objResultPtr = Tcl_NewStringObj((const char *)
valuePtr->bytes+index, 1);
} else {
- char buf[TCL_UTF_MAX] = "";
+ char buf[4] = "";
Tcl_UniChar ch = Tcl_GetUniChar(valuePtr, index);
/*
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index e4db140..1534a8b 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -1994,7 +1994,7 @@ Tcl_AppendFormatToObj(
}
break;
case 'c': {
- char buf[TCL_UTF_MAX];
+ char buf[4] = "";
int code, length;
if (TclGetIntFromObj(interp, segment, &code) != TCL_OK) {
@@ -3135,7 +3135,7 @@ ExtendStringRepWithUnicode(
*/
int i, origLength, size = 0;
- char *dst, buf[TCL_UTF_MAX];
+ char *dst, buf[4] = "";
String *stringPtr = GET_STRING(objPtr);
if (numChars < 0) {