summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2020-04-05 20:36:46 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2020-04-05 20:36:46 (GMT)
commit34db10ac21ca593a6979d79d3669aad78007892c (patch)
tree970c1b376a297a44284de5d38fe42ac6cb7b1bb4 /generic
parent4e2a2de6e8e2545dfc6da0d6bdc7856950ea5975 (diff)
parentde914c0ed5be4090e8f066359dab792e7cb0c90f (diff)
downloadtcl-34db10ac21ca593a6979d79d3669aad78007892c.zip
tcl-34db10ac21ca593a6979d79d3669aad78007892c.tar.gz
tcl-34db10ac21ca593a6979d79d3669aad78007892c.tar.bz2
Merge 8.6
Diffstat (limited to 'generic')
-rw-r--r--generic/tclTest.c12
-rw-r--r--generic/tclUtf.c5
2 files changed, 14 insertions, 3 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 03b5717..aaadc1d 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -6819,12 +6819,18 @@ TestNumUtfCharsCmd(
Tcl_Obj *const objv[])
{
if (objc > 1) {
- int len = -1;
+ int numBytes, len, limit = -1;
+ const char *bytes = Tcl_GetStringFromObj(objv[1], &numBytes);
if (objc > 2) {
- (void) Tcl_GetIntFromObj(interp, objv[2], &len);
+ if (TclGetIntForIndex(interp, objv[2], numBytes, &limit) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ if (limit > numBytes + 1) {
+ limit = numBytes + 1;
+ }
}
- len = Tcl_NumUtfChars(Tcl_GetString(objv[1]), len);
+ len = Tcl_NumUtfChars(bytes, limit);
Tcl_SetObjResult(interp, Tcl_NewIntObj(len));
}
return TCL_OK;
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index a8b04bf..6526645 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -64,8 +64,13 @@ static const unsigned char totalBytes[256] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+#if TCL_UTF_MAX > 3
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+#else /* Tcl_UtfCharComplete() might point to 2nd byte of valid 4-byte sequence */
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+#endif
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1
};