aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2013-11-28 07:13:08 +1000
committerSteve Bennett <steveb@workware.net.au>2013-11-28 07:15:56 +1000
commit388573d26679efc0d7f6df87f834bdd32da64e5d (patch)
tree364e1df3e1ca48a409688fa8c3546e12822e8a25
parent9aa403ea46a0a3e3f63a45f14bf8d5fbb9e69eef (diff)
downloadjimtcl-388573d26679efc0d7f6df87f834bdd32da64e5d.zip
jimtcl-388573d26679efc0d7f6df87f834bdd32da64e5d.tar.gz
jimtcl-388573d26679efc0d7f6df87f834bdd32da64e5d.tar.bz2
Fix dict/list shimmering with embedded nulls
Reported-by: Andy <jimdevel@hummypkg.org.uk> Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c6
-rw-r--r--tests/dict.test8
2 files changed, 11 insertions, 3 deletions
diff --git a/jim.c b/jim.c
index b314e1c..300b3e4 100644
--- a/jim.c
+++ b/jim.c
@@ -6103,11 +6103,11 @@ static unsigned char ListElementQuotingType(const char *s, int len)
* scenario.
* Returns the length of the result.
*/
-static int BackslashQuoteString(const char *s, char *q)
+static int BackslashQuoteString(const char *s, int len, char *q)
{
char *p = q;
- while (*s) {
+ while (len--) {
switch (*s) {
case ' ':
case '$':
@@ -6223,7 +6223,7 @@ static void JimMakeListStringRep(Jim_Obj *objPtr, Jim_Obj **objv, int objc)
*p++ = '\\';
realLength++;
}
- qlen = BackslashQuoteString(strRep, p);
+ qlen = BackslashQuoteString(strRep, len, p);
p += qlen;
realLength += qlen;
break;
diff --git a/tests/dict.test b/tests/dict.test
index e5e3d60..6387cd0 100644
--- a/tests/dict.test
+++ b/tests/dict.test
@@ -230,4 +230,12 @@ test dict-23.4 {dict unset command: write failure} -setup {
test dict-24.1 {dict/list shimmering - Bug 3004007} {set l [list p 1 p 2 q 3];dict get $l q;set l} {p 1 p 2 q 3}
test dict-24.2 {dict/list shimmering - Bug 3004007} {set l [list p 1 p 2 q 3];dict get $l q;llength $l} 6
+test dict-24.3 {dict/list shimmering with embedded nulls} {
+ # Must be a string containing embedded nulls that would be double quoted in string form
+ set binary_value 1\000\\
+ set dictVar [dict create value $binary_value]
+ lassign $dictVar k v
+ string length $v
+} {3}
+
testreport