From b4bebb7ead0461529c9ff26cbb3db6b77a2643be Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Tue, 17 May 2011 16:35:32 -0700 Subject: don't mangle absolute paths in the canonicalizer We frequently do use absolute paths when depfiles refer to e.g. /usr/include/stdio.h. --- src/util.cc | 2 +- src/util_test.cc | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util.cc b/src/util.cc index e48c277..63d3800 100644 --- a/src/util.cc +++ b/src/util.cc @@ -79,7 +79,7 @@ bool CanonicalizePath(string* path, string* err) { string::size_type end = path->find('/', start); if (end == string::npos) end = path->size(); - if (end > start) { + if (end == 0 || end > start) { if (parts_count == kMaxPathComponents) { *err = "can't canonicalize path '" + *path + "'; too many " "path components"; diff --git a/src/util_test.cc b/src/util_test.cc index 4b4c760..87b614c 100644 --- a/src/util_test.cc +++ b/src/util_test.cc @@ -53,3 +53,11 @@ TEST(CanonicalizePath, PathSamples) { EXPECT_EQ("can't canonicalize path './x/../foo/../../bar.h' that reaches " "above its directory", err); } + +TEST(CanonicalizePath, AbsolutePath) { + string path = "/usr/include/stdio.h"; + string err = ""; + EXPECT_TRUE(CanonicalizePath(&path, &err)); + EXPECT_EQ("", err); + EXPECT_EQ("/usr/include/stdio.h", path); +} -- cgit v0.12