summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Niklas Hasse <jhasse@bixense.com>2024-03-22 20:10:56 (GMT)
committerGitHub <noreply@github.com>2024-03-22 20:10:56 (GMT)
commit481889bb5f3faa5b83116f6e583564e26bbabeec (patch)
tree522a5d700092aed3535a70619793b935c406c372 /src
parent9279832b28f2a7be30245d503b2ba974c3487a48 (diff)
parente5413d3cc13a3a9de0b8ca6faadb813270687cba (diff)
downloadNinja-481889bb5f3faa5b83116f6e583564e26bbabeec.zip
Ninja-481889bb5f3faa5b83116f6e583564e26bbabeec.tar.gz
Ninja-481889bb5f3faa5b83116f6e583564e26bbabeec.tar.bz2
Merge pull request #2398 from paboldin/pboldin/fixes/meson-lisa-dpdk-build
CanonicalizePath: fix 'a/b/.._foo' -> 'a' replacement
Diffstat (limited to 'src')
-rw-r--r--src/util.cc2
-rw-r--r--src/util_test.cc4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/util.cc b/src/util.cc
index 2a43775..7668e33 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -253,7 +253,7 @@ void CanonicalizePath(char* path, size_t* len, uint64_t* slash_bits) {
if (src[0] == '.') {
if (component_len == 1)
break; // Ignore trailing '.' (e.g. 'foo/.' -> 'foo/')
- if (src[1] == '.') {
+ if (component_len == 2 && src[1] == '.') {
// Handle '..'. Back up if possible.
if (component_count > 0) {
while (--dst > dst0 && !IsPathSeparator(dst[-1])) {
diff --git a/src/util_test.cc b/src/util_test.cc
index 8467e2a..d76954c 100644
--- a/src/util_test.cc
+++ b/src/util_test.cc
@@ -152,6 +152,10 @@ TEST(CanonicalizePath, PathSamples) {
path = "foo/..";
CanonicalizePath(&path);
EXPECT_EQ(".", path);
+
+ path = "foo/.._bar";
+ CanonicalizePath(&path);
+ EXPECT_EQ("foo/.._bar", path);
}
#ifdef _WIN32