diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 3f13ddb..575081c 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -600,13 +600,21 @@ { auto orig = path.toNativeString(); if (!path.absolute) return orig; - auto ret = path.relativeTo(base).toNativeString(); - return ret.length < orig.length ? ret : orig; + version (Windows) + { + // avoid relative paths starting with `..\`: https://github.com/dlang/dub/issues/2143 + if (!path.startsWith(base)) return orig; + } + auto rel = path.relativeTo(base).toNativeString(); + return rel.length < orig.length ? rel : orig; } unittest { assert(shrinkPath(NativePath("/foo/bar/baz"), NativePath("/foo")) == NativePath("bar/baz").toNativeString()); - assert(shrinkPath(NativePath("/foo/bar/baz"), NativePath("/foo/baz")) == NativePath("../bar/baz").toNativeString()); + version (Windows) + assert(shrinkPath(NativePath("/foo/bar/baz"), NativePath("/foo/baz")) == NativePath("/foo/bar/baz").toNativeString()); + else + assert(shrinkPath(NativePath("/foo/bar/baz"), NativePath("/foo/baz")) == NativePath("../bar/baz").toNativeString()); assert(shrinkPath(NativePath("/foo/bar/baz"), NativePath("/bar/")) == NativePath("/foo/bar/baz").toNativeString()); assert(shrinkPath(NativePath("/foo/bar/baz"), NativePath("/bar/baz")) == NativePath("/foo/bar/baz").toNativeString()); }