diff options
author | Steve Bennett <steveb@workware.net.au> | 2013-11-28 07:13:08 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2013-11-28 07:15:56 +1000 |
commit | 388573d26679efc0d7f6df87f834bdd32da64e5d (patch) | |
tree | 364e1df3e1ca48a409688fa8c3546e12822e8a25 | |
parent | 9aa403ea46a0a3e3f63a45f14bf8d5fbb9e69eef (diff) | |
download | jimtcl-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.c | 6 | ||||
-rw-r--r-- | tests/dict.test | 8 |
2 files changed, 11 insertions, 3 deletions
@@ -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 |