From fb320646918dac633bdb4e449e7d0f372d83d01d Mon Sep 17 00:00:00 2001 From: Scott Graham Date: Wed, 12 Nov 2014 12:32:45 -0800 Subject: set *err when too many components in CanonicalizePath --- src/util.cc | 4 +++- src/util_test.cc | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/util.cc b/src/util.cc index 4df81dd..7717ef4 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 5bbf397..13730af 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 -- cgit v0.12