diff options
-rw-r--r-- | jim-regexp.c | 6 | ||||
-rw-r--r-- | regtest.tcl | 10 |
2 files changed, 12 insertions, 4 deletions
diff --git a/jim-regexp.c b/jim-regexp.c index 702fdfe..8e497a2 100644 --- a/jim-regexp.c +++ b/jim-regexp.c @@ -80,10 +80,6 @@ static regex_t *SetRegexpFromAny(Jim_Interp *interp, Jim_Obj *objPtr, unsigned f } /* Not a regexp or the flags do not match */ - if (objPtr->typePtr == ®expObjType) { - FreeRegexpInternalRep(interp, objPtr); - objPtr->typePtr = NULL; - } /* Get the string representation */ pattern = Jim_String(objPtr); @@ -99,6 +95,8 @@ static regex_t *SetRegexpFromAny(Jim_Interp *interp, Jim_Obj *objPtr, unsigned f return NULL; } + Jim_FreeIntRep(interp, objPtr); + objPtr->typePtr = ®expObjType; objPtr->internalRep.regexpValue.flags = flags; objPtr->internalRep.regexpValue.compre = compre; diff --git a/regtest.tcl b/regtest.tcl index 66c20ca..de796d9 100644 --- a/regtest.tcl +++ b/regtest.tcl @@ -143,6 +143,16 @@ eval $x lappend x b puts "TEST 22 PASSED" +# REGTEST 23 +# 27 July 2011 - unfreed objects on exit +catch { + set x abc + subst $x + regexp $x $x +} +# Actually, the test passes if no objects leaked on exit +puts "TEST 23 PASSED" + # TAKE THE FOLLOWING puts AS LAST LINE puts "--- ALL TESTS PASSED ---" |