diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclCompCmds.c | 5 | ||||
-rw-r--r-- | generic/tclCompExpr.c | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/generic/tclCompCmds.c b/generic/tclCompCmds.c index 04f6bd5..8651432 100644 --- a/generic/tclCompCmds.c +++ b/generic/tclCompCmds.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCompCmds.c,v 1.108 2007/04/15 18:59:34 kennykb Exp $ + * RCS: @(#) $Id: tclCompCmds.c,v 1.109 2007/04/23 19:04:42 kennykb Exp $ */ #include "tclInt.h" @@ -5366,11 +5366,13 @@ TclCompileUpvarCmd( Tcl_Obj *objPtr = Tcl_NewObj(); if (envPtr->procPtr == NULL) { + Tcl_DecrRefCount(objPtr); return TCL_ERROR; } numWords = parsePtr->numWords; if (numWords < 3) { + Tcl_DecrRefCount(objPtr); return TCL_ERROR; } @@ -5409,6 +5411,7 @@ TclCompileUpvarCmd( i = 3; } } else { + Tcl_DecrRefCount(objPtr); return TCL_ERROR; } diff --git a/generic/tclCompExpr.c b/generic/tclCompExpr.c index e5cddb3..6acf13e 100644 --- a/generic/tclCompExpr.c +++ b/generic/tclCompExpr.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCompExpr.c,v 1.50 2007/04/17 14:49:53 dkf Exp $ + * RCS: @(#) $Id: tclCompExpr.c,v 1.51 2007/04/23 19:04:43 kennykb Exp $ */ #include "tclInt.h" @@ -202,7 +202,7 @@ ParseExpr( * those operands that require run time * substitutions. */ { - OpNode *nodes; + OpNode *nodes = NULL; int nodesAvailable = 64, nodesUsed = 0; int code = TCL_OK; int numLiterals = 0, numFuncs = 0; @@ -723,6 +723,9 @@ ParseExpr( numBytes -= scanned; } + if (code != TCL_OK && nodes != NULL) { + ckfree((char*) nodes); + } if (code == TCL_OK) { *opTreePtr = nodes; } else if (interp == NULL) { |