summaryrefslogtreecommitdiffstats
path: root/generic/tclTest.c
diff options
context:
space:
mode:
authorapnadkarni <apnmbx-wits@yahoo.com>2023-09-05 07:02:39 (GMT)
committerapnadkarni <apnmbx-wits@yahoo.com>2023-09-05 07:02:39 (GMT)
commit5a68be155bf81c58e4dc4362faa31ddde852a245 (patch)
tree288cafb2a0e52efe0ff9dabd48c55631fdda65de /generic/tclTest.c
parentc2226f346edb12e40c923a00b375e70834ee3198 (diff)
parent1de4b18af94b1835fbaf130e84d9115bb2f387b0 (diff)
downloadtcl-5a68be155bf81c58e4dc4362faa31ddde852a245.zip
tcl-5a68be155bf81c58e4dc4362faa31ddde852a245.tar.gz
tcl-5a68be155bf81c58e4dc4362faa31ddde852a245.tar.bz2
Merge 8.7 - Fix [b5ac3e3786] - Tcl_GetUniChar oob read
Diffstat (limited to 'generic/tclTest.c')
-rw-r--r--generic/tclTest.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c
index b87d659..c0b20ad 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -328,6 +328,7 @@ static Tcl_FSMatchInDirectoryProc SimpleMatchInDirectory;
static Tcl_ObjCmdProc TestUtfNextCmd;
static Tcl_ObjCmdProc TestUtfPrevCmd;
static Tcl_ObjCmdProc TestNumUtfCharsCmd;
+static Tcl_ObjCmdProc TestGetUniCharCmd;
static Tcl_ObjCmdProc TestFindFirstCmd;
static Tcl_ObjCmdProc TestFindLastCmd;
static Tcl_ObjCmdProc TestHashSystemHashCmd;
@@ -686,6 +687,8 @@ Tcltest_Init(
TestUtfPrevCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "testnumutfchars",
TestNumUtfCharsCmd, NULL, NULL);
+ Tcl_CreateObjCommand(interp, "testgetunichar",
+ TestGetUniCharCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "testfindfirst",
TestFindFirstCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "testfindlast",
@@ -7630,6 +7633,34 @@ TestNumUtfCharsCmd(
return TCL_OK;
}
+
+/*
+ * Used to check correct operation of Tcl_GetUniChar
+ * testgetunichar STRING INDEX
+ * This differs from just using "string index" in being a direct
+ * call to Tcl_GetUniChar without any prior range checking.
+ */
+static int
+TestGetUniCharCmd(
+ ClientData dummy, /* Not used. */
+ Tcl_Interp *interp, /* Current interpreter */
+ int objc, /* Number of arguments */
+ Tcl_Obj *const objv[] /* Argument strings */
+ )
+{
+ int index;
+ int c ;
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 1, objv, "STRING INDEX");
+ return TCL_ERROR;
+ }
+ Tcl_GetIntFromObj(interp, objv[2], &index);
+ c = Tcl_GetUniChar(objv[1], index);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(c));
+
+ return TCL_OK;
+}
+
/*
* Used to check correct operation of Tcl_UtfFindFirst
*/