summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Niklas Hasse <jhasse@bixense.com>2019-10-30 14:43:49 (GMT)
committerGitHub <noreply@github.com>2019-10-30 14:43:49 (GMT)
commit40d45a7bb3bd07d50562a468f9c550f555eb2f8a (patch)
tree322fc5928c55e35975dc517cb27d544921feef0b
parent97c5949ffeb4ec84cec1290c118cf34aa0e503e4 (diff)
parent04ce2ea7a2930b32655823d55a8ff9865a37d6c2 (diff)
downloadNinja-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.cc6
-rw-r--r--src/util_test.cc4
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) {