From c0108dceb13e2079a9a4b662d98fa27a8c5d13c0 Mon Sep 17 00:00:00 2001 From: dgp Date: Mon, 1 May 2017 20:23:28 +0000 Subject: [f9fe90d0fa] [file join] normalization. See filesystem-1.52* --- generic/tclPathObj.c | 12 +++++++++++- tests/fileSystem.test | 10 ++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/generic/tclPathObj.c b/generic/tclPathObj.c index 6dd2f3f..88e49b5 100644 --- a/generic/tclPathObj.c +++ b/generic/tclPathObj.c @@ -921,7 +921,17 @@ Tcl_FSJoinPath( if (res != NULL) { TclDecrRefCount(res); } - return TclNewFSPathObj(elt, str, len); + + if (PATHFLAGS(elt)) { + return TclNewFSPathObj(elt, str, len); + } + if (TCL_PATH_ABSOLUTE != Tcl_FSGetPathType(elt)) { + return TclNewFSPathObj(elt, str, len); + } + (void) Tcl_FSGetNormalizedPath(NULL, elt); + if (elt == PATHOBJ(elt)->normPathPtr) { + return TclNewFSPathObj(elt, str, len); + } } } diff --git a/tests/fileSystem.test b/tests/fileSystem.test index c255b1e..28e5268 100644 --- a/tests/fileSystem.test +++ b/tests/fileSystem.test @@ -498,6 +498,16 @@ test filesystem-1.51.1 {file normalisation .. beyond root (Bug 1379287)} { set res "ok" } } {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*]] { -- cgit v0.12