diff options
author | dgp <dgp@users.sourceforge.net> | 2013-07-24 16:56:59 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2013-07-24 16:56:59 (GMT) |
commit | fd1c7c2fb32af791a4a1025e23abcf20d384435f (patch) | |
tree | a603d8e7dde86e04737b1a2353218ef36188adf4 /tests/parse.test | |
parent | f2bea640bbf79037a46201c95c581f6f8ac5e5ee (diff) | |
parent | 8f2d19b95103df07e718125efcd772ff582c2be1 (diff) | |
download | tcl-fd1c7c2fb32af791a4a1025e23abcf20d384435f.zip tcl-fd1c7c2fb32af791a4a1025e23abcf20d384435f.tar.gz tcl-fd1c7c2fb32af791a4a1025e23abcf20d384435f.tar.bz2 |
Demonstrate and fix memory leak in Tcl_ParseVar().
Diffstat (limited to 'tests/parse.test')
-rw-r--r-- | tests/parse.test | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/parse.test b/tests/parse.test index b9cfe80..9f2d50b 100644 --- a/tests/parse.test +++ b/tests/parse.test @@ -27,6 +27,7 @@ testConstraint testparsevar [llength [info commands testparsevar]] testConstraint testasync [llength [info commands testasync]] testConstraint testcmdtrace [llength [info commands testcmdtrace]] testConstraint testevent [llength [info commands testevent]] +testConstraint memory [llength [info commands memory]] test parse-1.1 {Tcl_ParseCommand procedure, computing string length} testparser { testparser [bytestring "foo\0 bar"] -1 @@ -678,6 +679,26 @@ test parse-13.5 {Tcl_ParseVar procedure, error looking up variable} testparsevar unset -nocomplain abc list [catch {testparsevar {$abc([bogus x y z])}} msg] $msg } {1 {invalid command name "bogus"}} +test parse-13.6 {Tcl_ParseVar memory leak} -constraints memory -setup { + proc getbytes {} { + return [lindex [split [memory info] \n] 3 3] + } +} -body { + set a() foo + set end [getbytes] + for {set i 0} {$i < 5} {incr i} { + set vn {} + set res [testparsevar [append vn $ a([string repeat {[]} 19]) bar]] + if {$res ne {foo bar}} {error "Unexpected result: $res"} + + set tmp $end + set end [getbytes] + } + expr {$end - $tmp} +} -cleanup { + unset -nocomplain a end i vn res tmp + rename getbytes {} +} -result 0 test parse-14.1 {Tcl_ParseBraces procedure, computing string length} testparser { testparser [bytestring "foo\0 bar"] -1 |