From e9087f5cdf2c8485b5b0a6858782bb02dbffbcdd Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Sat, 4 Feb 2012 14:14:04 -0800 Subject: [PATCH] don't crash when CanonicalizePath removes all path components From a patch from Peter Kuemmel . --- src/util.cc | 5 +++++ src/util_test.cc | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/util.cc b/src/util.cc index 1dd9838..02be994 100644 --- a/src/util.cc +++ b/src/util.cc @@ -148,6 +148,11 @@ bool CanonicalizePath(char* path, int* len, string* err) { src = sep + 1; } + if (dst == start) { + *err = "path canonicalizes to the empty path"; + return false; + } + *len = dst - start - 1; return true; } diff --git a/src/util_test.cc b/src/util_test.cc index c44ab77..5b6b164 100644 --- a/src/util_test.cc +++ b/src/util_test.cc @@ -54,6 +54,23 @@ TEST(CanonicalizePath, PathSamples) { path = "./x/../foo/../../bar.h"; EXPECT_TRUE(CanonicalizePath(&path, &err)); EXPECT_EQ("../bar.h", path); + + path = "foo/./."; + EXPECT_TRUE(CanonicalizePath(&path, &err)); + EXPECT_EQ("foo", path); +} + +TEST(CanonicalizePath, EmptyResult) { + string path; + string err; + + path = "."; + EXPECT_FALSE(CanonicalizePath(&path, &err)); + EXPECT_EQ("path canonicalizes to the empty path", err); + + path = "./."; + EXPECT_FALSE(CanonicalizePath(&path, &err)); + EXPECT_EQ("path canonicalizes to the empty path", err); } TEST(CanonicalizePath, UpDir) { -- 2.34.1