summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2020-04-03 20:56:42 (GMT)
committerdgp <dgp@users.sourceforge.net>2020-04-03 20:56:42 (GMT)
commit2bc844ee6103b696341a49471260cd58963a0b51 (patch)
tree8641005660537a418246a049e6b11d1fadc54b0f /generic
parent63ec99cd74c727ff07213127dd09d2d48e7736b1 (diff)
downloadtcl-2bc844ee6103b696341a49471260cd58963a0b51.zip
tcl-2bc844ee6103b696341a49471260cd58963a0b51.tar.gz
tcl-2bc844ee6103b696341a49471260cd58963a0b51.tar.bz2
Fix testing command [testnumutfchars] so it cannot overrun the buffer.
Diffstat (limited to 'generic')
-rw-r--r--generic/tclTest.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 3e8cb6a..f63f891 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -6805,12 +6805,16 @@ 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);
+ (void) Tcl_GetIntFromObj(interp, objv[2], &limit);
+ if (limit > numBytes) {
+ limit = numBytes;
+ }
}
- len = Tcl_NumUtfChars(Tcl_GetString(objv[1]), len);
+ len = Tcl_NumUtfChars(bytes, limit);
Tcl_SetObjResult(interp, Tcl_NewIntObj(len));
}
return TCL_OK;