summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/util.cc4
-rw-r--r--src/util_test.cc4
2 files changed, 7 insertions, 1 deletions
diff --git a/src/util.cc b/src/util.cc
index e0320eb..746d7ed 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -145,8 +145,10 @@ bool CanonicalizePath(char* path, size_t* len, unsigned int* slash_bits,
bits_offset++;
}
}
- if (bits_offset > 32)
+ if (bits_offset > 32) {
+ *err = "too many path components";
return false;
+ }
bits_offset = 0;
#endif
diff --git a/src/util_test.cc b/src/util_test.cc
index 1ee8f35..8ca7f56 100644
--- a/src/util_test.cc
+++ b/src/util_test.cc
@@ -272,15 +272,19 @@ TEST(CanonicalizePath, TooManyComponents) {
EXPECT_EQ(slash_bits, 0xffff);
// 33 is not.
+ err = "";
path =
"a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/./a/x.h";
EXPECT_FALSE(CanonicalizePath(&path, &slash_bits, &err));
+ EXPECT_EQ(err, "too many path components");
// Backslashes version.
+ err = "";
path =
"a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\.\\a\\."
"\\a\\.\\a\\.\\a\\.\\a\\.\\a\\x.h";
EXPECT_FALSE(CanonicalizePath(&path, &slash_bits, &err));
+ EXPECT_EQ(err, "too many path components");
}
#endif