diff options
author | Steve Bennett <steveb@workware.net.au> | 2017-04-07 09:49:01 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2017-04-07 11:10:46 +1000 |
commit | fdeb3a6c507680181a41e1f24cae711357819c4c (patch) | |
tree | af01c74d875bc8e083fdbd441c6eb5cd6c144f35 | |
parent | cc83b696b6b5e4cef4e312782a3fff23d5cdb8ad (diff) | |
download | jimtcl-fdeb3a6c507680181a41e1f24cae711357819c4c.zip jimtcl-fdeb3a6c507680181a41e1f24cae711357819c4c.tar.gz jimtcl-fdeb3a6c507680181a41e1f24cae711357819c4c.tar.bz2 |
Fix ref count for interpolation/expression
Ref count may be wrong when an expression is used
in interpolation.
Reported-by: Ryan Whitworth <me@ryanwhitworth.com>
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 3 | ||||
-rw-r--r-- | regtest.tcl | 6 |
2 files changed, 8 insertions, 1 deletions
@@ -10557,7 +10557,8 @@ static Jim_Obj *JimInterpolateTokens(Jim_Interp *interp, const ScriptToken * tok /* Fast path return for a single token */ if (tokens == 1 && intv[0] && intv == sintv) { - Jim_DecrRefCount(interp, intv[0]); + /* Reverse the Jim_IncrRefCount() above, but don't free the object */ + intv[0]->refCount--; return intv[0]; } diff --git a/regtest.tcl b/regtest.tcl index 8bc6962..682255b 100644 --- a/regtest.tcl +++ b/regtest.tcl @@ -277,6 +277,12 @@ puts "TEST 36 PASSED" catch {expr {1 : 2 ? 3}} puts "TEST 37 PASSED" +# REGTEST 38 +# refcount with interpolation and expr +set b(-1) 5 +set a $b($(-1)) +puts "TEST 38 PASSED" + # TAKE THE FOLLOWING puts AS LAST LINE puts "--- ALL TESTS PASSED ---" |