diff options
author | dgp <dgp@users.sourceforge.net> | 2009-03-18 17:18:54 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2009-03-18 17:18:54 (GMT) |
commit | 653bcd908ccbb5daff9e2e4b6e01f64076a9247a (patch) | |
tree | d8691b015184f60db3d41b26c0e140bc032ec0e6 | |
parent | 66e884275c19a6e17f016bf828eed7b61431888b (diff) | |
download | tcl-653bcd908ccbb5daff9e2e4b6e01f64076a9247a.zip tcl-653bcd908ccbb5daff9e2e4b6e01f64076a9247a.tar.gz tcl-653bcd908ccbb5daff9e2e4b6e01f64076a9247a.tar.bz2 |
* win/tclWinFile.c (TclpObjNormalizePath): Corrected Tcl_Obj leak.
Thanks to Joe Mistachkin for detection and patch. [Bug 2688184].
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | win/tclWinFile.c | 14 |
2 files changed, 17 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2009-03-18 Don Porter <dgp@users.sourceforge.net> + + * win/tclWinFile.c (TclpObjNormalizePath): Corrected Tcl_Obj leak. + Thanks to Joe Mistachkin for detection and patch. [Bug 2688184]. + 2009-02-20 Don Porter <dgp@users.sourceforge.net> * generic/tclPathObj.c: Fixed mistaken logic in TclFSGetPathType() diff --git a/win/tclWinFile.c b/win/tclWinFile.c index c87edc3..8e35533 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinFile.c,v 1.44.2.18 2006/10/17 04:36:45 dgp Exp $ + * RCS: @(#) $Id: tclWinFile.c,v 1.44.2.19 2009/03/18 17:18:54 dgp Exp $ */ //#define _WIN32_WINNT 0x0500 @@ -2324,6 +2324,7 @@ TclpObjNormalizePath(interp, pathPtr, nextCheckpoint) Tcl_DString dsNorm; char *path; char *currentPathEndPosition; + Tcl_Obj *temp = NULL; Tcl_DStringInit(&dsNorm); path = Tcl_GetString(pathPtr); @@ -2420,7 +2421,6 @@ TclpObjNormalizePath(interp, pathPtr, nextCheckpoint) } } else { /* We're on WinNT or 2000 or XP */ - Tcl_Obj *temp = NULL; int isDrive = 1; Tcl_DString ds; @@ -2609,6 +2609,16 @@ TclpObjNormalizePath(interp, pathPtr, nextCheckpoint) Tcl_DStringFree(&dsTemp); } Tcl_DStringFree(&dsNorm); + + /* + * This must be done after we are totally finished with 'path' as we are + * sharing the same underlying string. + */ + + if (temp != NULL) { + Tcl_DecrRefCount(temp); + } + return nextCheckpoint; } |