diff options
author | aspect <aspect+tclcore@abstracted-spleen.org> | 2017-04-29 11:04:10 (GMT) |
---|---|---|
committer | aspect <aspect+tclcore@abstracted-spleen.org> | 2017-04-29 11:04:10 (GMT) |
commit | 83852c4bca6320aa6c14b148b137430aec4c5260 (patch) | |
tree | ba4b36e067db9d738e5ad918327137c0de090c20 | |
parent | 52482ea1e528751dcb61e736532dcc86469ccbc3 (diff) | |
download | tcl-bug_f9fe90d0fa.zip tcl-bug_f9fe90d0fa.tar.gz tcl-bug_f9fe90d0fa.tar.bz2 |
[f9fe90d0fa]: more path normalization in TclNewFSPathObjbug_f9fe90d0fa
-rw-r--r-- | generic/tclPathObj.c | 9 | ||||
-rw-r--r-- | tests/fileSystem.test | 10 |
2 files changed, 19 insertions, 0 deletions
diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index 43a3c85..ea15937 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -1278,6 +1278,15 @@ TclNewFSPathObj( const char *p; int state = 0, count = 0; + /* if dirPtr is already tclFsPathType, its string representation + * may not be canonical. Try to use its normPathPtr in this case. + */ + if ( (dirPtr->typePtr == &tclFsPathType) + && (PATHOBJ(dirPtr)->cwdPtr == NULL) + && (PATHOBJ(dirPtr)->normPathPtr != NULL) ) { + dirPtr = PATHOBJ(dirPtr)->normPathPtr; + } + /* [Bug 2806250] - this is only a partial solution of the problem. * The PATHFLAGS != 0 representation assumes in many places that * the "tail" part stored in the normPathPtr field is itself a diff --git a/tests/fileSystem.test b/tests/fileSystem.test index 1941936..4513fcb 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -367,6 +367,16 @@ test filesystem-1.51 {file normalisation .. beyond root (Bug 1379287)} { test filesystem-1.51.1 {file normalisation .. beyond root (Bug 1379287)} { testPathEqual [file norm /../../] [file norm /] } ok +test filesystem-1.52 {bug f9f390d0fa: file join where strep is not canonical} -body { + set x //foo + file normalize $x + file join $x bar +} -result /foo/bar +test filesystem-1.52.1 {bug f9f390d0fa: file join where strep is not canonical} -body { + set x //foo + file normalize $x + file join $x +} -result /foo test filesystem-2.0 {new native path} {unix} { foreach f [lsort [glob -nocomplain /usr/bin/c*]] { |