diff options
author | msofer <msofer@noemail.net> | 2003-02-18 02:22:32 (GMT) |
---|---|---|
committer | msofer <msofer@noemail.net> | 2003-02-18 02:22:32 (GMT) |
commit | ce4a32e90df2cc8122e34e0fa53a3f8a549703c5 (patch) | |
tree | 31a14f5685b47234e304a11f204cce379f1e9003 /generic | |
parent | 334c9658feab6e058533601003990edc6d85db2a (diff) | |
download | tcl-ce4a32e90df2cc8122e34e0fa53a3f8a549703c5.zip tcl-ce4a32e90df2cc8122e34e0fa53a3f8a549703c5.tar.gz tcl-ce4a32e90df2cc8122e34e0fa53a3f8a549703c5.tar.bz2 |
* generic/tclBasic.c (TclRenameCommand): 'oldFullName' object was
not being freed on all function exits, causing a memory leak
[Bug 684756]
FossilOrigin-Name: 1e414e91e6adeafb6fe6e724922c7c2c55da575d
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclBasic.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 45f1422..cd42855 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclBasic.c,v 1.73 2003/02/16 01:36:32 msofer Exp $ + * RCS: @(#) $Id: tclBasic.c,v 1.74 2003/02/18 02:22:33 msofer Exp $ */ #include "tclInt.h" @@ -1947,7 +1947,8 @@ TclRenameCommand(interp, oldName, newName) if ((newName == NULL) || (*newName == '\0')) { Tcl_DeleteCommandFromToken(interp, cmd); - return TCL_OK; + result = TCL_OK; + goto done; } /* @@ -1964,13 +1965,16 @@ TclRenameCommand(interp, oldName, newName) Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "can't rename to \"", newName, "\": bad command name", (char *) NULL); - return TCL_ERROR; + Tcl_DecrRefCount( oldFullName ); + result = TCL_ERROR; + goto done; } if (Tcl_FindHashEntry(&newNsPtr->cmdTable, newTail) != NULL) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "can't rename to \"", newName, "\": command already exists", (char *) NULL); - return TCL_ERROR; + result = TCL_ERROR; + goto done; } /* @@ -2002,7 +2006,7 @@ TclRenameCommand(interp, oldName, newName) Tcl_DeleteHashEntry(cmdPtr->hPtr); cmdPtr->hPtr = oldHPtr; cmdPtr->nsPtr = cmdNsPtr; - return result; + goto done; } /* @@ -2028,7 +2032,6 @@ TclRenameCommand(interp, oldName, newName) Tcl_GetString( oldFullName ), Tcl_DStringValue( &newFullName ), TCL_TRACE_RENAME); - Tcl_DecrRefCount( oldFullName ); Tcl_DStringFree( &newFullName ); /* @@ -2056,8 +2059,11 @@ TclRenameCommand(interp, oldName, newName) * been deleted by invocation of rename traces. */ TclCleanupCommand(cmdPtr); + result = TCL_OK; - return TCL_OK; + done: + TclDecrRefCount( oldFullName ); + return result; } /* |