diff options
author | dgp <dgp@noemail.net> | 2009-11-10 16:46:16 (GMT) |
---|---|---|
committer | dgp <dgp@noemail.net> | 2009-11-10 16:46:16 (GMT) |
commit | 8b39f4ac66cb5a22519f1f58b75705751426bb50 (patch) | |
tree | baf529a327bd975c75189deb91e02a757d5b777d /generic/tclObj.c | |
parent | 6d008fa7bf0f53e91ba17b93b41868e701a3d15e (diff) | |
download | tcl-8b39f4ac66cb5a22519f1f58b75705751426bb50.zip tcl-8b39f4ac66cb5a22519f1f58b75705751426bb50.tar.gz tcl-8b39f4ac66cb5a22519f1f58b75705751426bb50.tar.bz2 |
* generic/tclObj.c: Plus memory leak in TclContinuationsEnter().
[Bug 2895323]
FossilOrigin-Name: d250faf92f5d7d81a03689f84e8aecd1cb42586f
Diffstat (limited to 'generic/tclObj.c')
-rw-r--r-- | generic/tclObj.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/generic/tclObj.c b/generic/tclObj.c index 23097f6..7a37fd3 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.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: tclObj.c,v 1.139.2.5 2009/10/18 11:21:38 mistachkin Exp $ + * RCS: @(#) $Id: tclObj.c,v 1.139.2.6 2009/11/10 16:46:16 dgp Exp $ */ #include "tclInt.h" @@ -574,6 +574,17 @@ TclContinuationsEnter(Tcl_Obj* objPtr, ContLineLoc* clLocPtr = (ContLineLoc*) ckalloc (sizeof(ContLineLoc) + num*sizeof(int)); + if (newEntry == 0) { + /* + * Somehow we're entering ContLineLoc data for the same value more + * than one time. Not sure whether that's expected, or a sign of + * trouble, but at a minimum, we should take care not to leak the + * old entry. + */ + + ckfree((char *) Tcl_GetHashValue(hPtr)); + } + clLocPtr->num = num; memcpy (&clLocPtr->loc, loc, num*sizeof(int)); clLocPtr->loc[num] = CLL_END; /* Sentinel */ |