diff options
author | Jan Niklas Hasse <jhasse@bixense.com> | 2019-10-30 14:43:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-30 14:43:49 (GMT) |
commit | 40d45a7bb3bd07d50562a468f9c550f555eb2f8a (patch) | |
tree | 322fc5928c55e35975dc517cb27d544921feef0b | |
parent | 97c5949ffeb4ec84cec1290c118cf34aa0e503e4 (diff) | |
parent | 04ce2ea7a2930b32655823d55a8ff9865a37d6c2 (diff) | |
download | Ninja-40d45a7bb3bd07d50562a468f9c550f555eb2f8a.zip Ninja-40d45a7bb3bd07d50562a468f9c550f555eb2f8a.tar.gz Ninja-40d45a7bb3bd07d50562a468f9c550f555eb2f8a.tar.bz2 |
Merge pull request #1654 from BourgondAries/master
Ensure substring indexing never goes negative
-rw-r--r-- | src/util.cc | 6 | ||||
-rw-r--r-- | src/util_test.cc | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/util.cc b/src/util.cc index 666cf9d..70096cd 100644 --- a/src/util.cc +++ b/src/util.cc @@ -596,6 +596,12 @@ double GetLoadAverage() { #endif // _WIN32 string ElideMiddle(const string& str, size_t width) { + switch (width) { + case 0: return ""; + case 1: return "."; + case 2: return ".."; + case 3: return "..."; + } const int kMargin = 3; // Space for "...". string result = str; if (result.size() > width) { diff --git a/src/util_test.cc b/src/util_test.cc index d97b48c..b43788d 100644 --- a/src/util_test.cc +++ b/src/util_test.cc @@ -420,6 +420,10 @@ TEST(ElideMiddle, NothingToElide) { string input = "Nothing to elide in this short string."; EXPECT_EQ(input, ElideMiddle(input, 80)); EXPECT_EQ(input, ElideMiddle(input, 38)); + EXPECT_EQ("", ElideMiddle(input, 0)); + EXPECT_EQ(".", ElideMiddle(input, 1)); + EXPECT_EQ("..", ElideMiddle(input, 2)); + EXPECT_EQ("...", ElideMiddle(input, 3)); } TEST(ElideMiddle, ElideInTheMiddle) { |