summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2018-04-25 11:09:53 (GMT)
committerdgp <dgp@users.sourceforge.net>2018-04-25 11:09:53 (GMT)
commit9ff5b7077a286a44e200859c71d641d9ea3bd60d (patch)
treeca51c8661de356331efca8727204e02111aca0bf
parent7234985a63639e4f9c719cba33929c8adaaaa298 (diff)
downloadtcl-9ff5b7077a286a44e200859c71d641d9ea3bd60d.zip
tcl-9ff5b7077a286a44e200859c71d641d9ea3bd60d.tar.gz
tcl-9ff5b7077a286a44e200859c71d641d9ea3bd60d.tar.bz2
Plug memory leak handling circular path values.
-rw-r--r--generic/tclPathObj.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c
index e9d2fcb..c072fe0 100644
--- a/generic/tclPathObj.c
+++ b/generic/tclPathObj.c
@@ -2388,16 +2388,14 @@ SetFsPathFromAny(
fsPathPtr = ckalloc(sizeof(FsPath));
- fsPathPtr->translatedPathPtr = transPtr;
- if (fsPathPtr->translatedPathPtr != NULL) {
- Tcl_IncrRefCount(fsPathPtr->translatedPathPtr);
- }
- if (transPtr != pathPtr) {
- /* Redo translation when $env(HOME) changes */
- fsPathPtr->filesystemEpoch = TclFSEpoch();
+ if (transPtr == pathPtr) {
+ transPtr = Tcl_DuplicateObj(pathPtr);
+ fsPathPtr->filesystemEpoch = 0;
} else {
- fsPathPtr->filesystemEpoch = 0;
+ fsPathPtr->filesystemEpoch = TclFSEpoch();
}
+ Tcl_IncrRefCount(transPtr);
+ fsPathPtr->translatedPathPtr = transPtr;
fsPathPtr->normPathPtr = NULL;
fsPathPtr->cwdPtr = NULL;
fsPathPtr->nativePathPtr = NULL;