diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-04-05 20:36:46 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-04-05 20:36:46 (GMT) |
| commit | 34db10ac21ca593a6979d79d3669aad78007892c (patch) | |
| tree | 970c1b376a297a44284de5d38fe42ac6cb7b1bb4 /generic | |
| parent | 4e2a2de6e8e2545dfc6da0d6bdc7856950ea5975 (diff) | |
| parent | de914c0ed5be4090e8f066359dab792e7cb0c90f (diff) | |
| download | tcl-34db10ac21ca593a6979d79d3669aad78007892c.zip tcl-34db10ac21ca593a6979d79d3669aad78007892c.tar.gz tcl-34db10ac21ca593a6979d79d3669aad78007892c.tar.bz2 | |
Merge 8.6
Diffstat (limited to 'generic')
| -rw-r--r-- | generic/tclTest.c | 12 | ||||
| -rw-r--r-- | generic/tclUtf.c | 5 |
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 }; |
