summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2023-05-07 20:10:58 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2023-05-07 20:10:58 (GMT)
commit4dcdd51adbe299efe67dc9aa9c2034df855aef28 (patch)
tree39a80acb26df459104fc8b72e9e7e47ded950e49
parentce9f04ddd190636ebe21db6638701c576dc16a85 (diff)
parent73dbbaaa23c0ab5d0233211c9f2e34782991a87d (diff)
downloadtcl-4dcdd51adbe299efe67dc9aa9c2034df855aef28.zip
tcl-4dcdd51adbe299efe67dc9aa9c2034df855aef28.tar.gz
tcl-4dcdd51adbe299efe67dc9aa9c2034df855aef28.tar.bz2
Merge 8.7
-rw-r--r--tests/dstring.test18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/dstring.test b/tests/dstring.test
index 23863d0..7c9d9f6 100644
--- a/tests/dstring.test
+++ b/tests/dstring.test
@@ -418,6 +418,24 @@ test dstring-4.2 {truncation} -constraints testdstring -setup {
} -cleanup {
testdstring free
} -result {{} 0}
+test dstring-4.3 {truncation} -constraints testdstring -setup {
+ testdstring free
+} -body {
+ testdstring append "xwvut" -1
+ # Pass a negative length to Tcl_DStringSetLength();
+ # if not caught, causing '\0' to be written out-of-bounds,
+ # try corrupting dsPtr->length which begins
+ # 2*sizeof(Tcl_Size) bytes before dsPtr->staticSpace[],
+ # so that the result is -256 (on little endian systems)
+ # rather than e.g. -8 or -16.
+ # (sizeof(Tcl_Size) does not seem to be available via Tcl,
+ # so assume sizeof(Tcl_Size) == sizeof(void*) for Tcl 9.)
+ testdstring trunc [expr {-2*([package vsatisfies $tcl_version 9.0-]
+ ? $tcl_platform(pointerSize) : 4)}]
+ list [testdstring get] [testdstring length]
+} -cleanup {
+ testdstring free
+} -result {{} 0}
test dstring-5.1 {copying to result} -constraints testdstring -setup {
testdstring free