summaryrefslogtreecommitdiffstats
path: root/generic/tclStringObj.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-23 13:31:43 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-23 13:31:43 (GMT)
commit1f3d3d7671748e4eb36cc0846e3e953bdb29c227 (patch)
tree3acc633a0da2b0694969904e6c65359364fc590b /generic/tclStringObj.c
parent5516772e8b562cfd568293d3616bf1a0f493b752 (diff)
downloadtcl-1f3d3d7671748e4eb36cc0846e3e953bdb29c227.zip
tcl-1f3d3d7671748e4eb36cc0846e3e953bdb29c227.tar.gz
tcl-1f3d3d7671748e4eb36cc0846e3e953bdb29c227.tar.bz2
Fix crash in (compabitility) "string" objType
Diffstat (limited to 'generic/tclStringObj.c')
-rw-r--r--generic/tclStringObj.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index d43c507..9655479 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -208,13 +208,14 @@ SetUTF16StringFromAny(
Tcl_DStringInit(&ds);
unsigned short *utf16string = Tcl_UtfToChar16DString(objPtr->bytes, objPtr->length, &ds);
- size_t size = Tcl_DStringLength(&ds);
- String *stringPtr = (String *)ckalloc((offsetof(String, unicode) + 2U) + size);
+ int size = Tcl_DStringLength(&ds);
+ String *stringPtr = (String *)ckalloc((offsetof(String, unicode) + sizeof(unsigned short)) + size);
+
memcpy(stringPtr->unicode, utf16string, size);
- stringPtr->unicode[size] = 0;
Tcl_DStringFree(&ds);
-
size /= sizeof(unsigned short);
+ stringPtr->unicode[size] = 0;
+
stringPtr->numChars = size;
stringPtr->allocated = size;
stringPtr->maxChars = size;
@@ -222,7 +223,7 @@ SetUTF16StringFromAny(
objPtr->internalRep.twoPtrValue.ptr1 = stringPtr;
objPtr->typePtr = &tclStringType;
}
- return TCL_OK;
+ return TCL_OK;
}
static void
@@ -237,10 +238,10 @@ UpdateStringOfUTF16String(
char *bytes = (char *)ckalloc(Tcl_DStringLength(&ds) + 1U);
memcpy(bytes, string, Tcl_DStringLength(&ds));
+ bytes[Tcl_DStringLength(&ds)] = 0;
Tcl_DStringFree(&ds);
objPtr->bytes = bytes;
objPtr->length = Tcl_DStringLength(&ds);
- printf("UpdateStringOfUTF16String %d %d\n", stringPtr->unicode[0], stringPtr->unicode[1]);
}
#endif