Merge "String8: fix infinite loop and segmentation fault in removeAll()" into main

This commit is contained in:
Eric Miao 2023-07-19 02:03:40 +00:00 committed by Gerrit Code Review
commit 4a33c22c77
2 changed files with 23 additions and 0 deletions

View file

@ -393,6 +393,11 @@ ssize_t String8::find(const char* other, size_t start) const
}
bool String8::removeAll(const char* other) {
ALOG_ASSERT(other, "String8::removeAll() requires a non-NULL string");
if (*other == '\0')
return true;
ssize_t index = find(other);
if (index < 0) return false;

View file

@ -114,3 +114,21 @@ TEST_F(String8Test, append) {
EXPECT_EQ(NO_MEMORY, s.append("baz", SIZE_MAX));
EXPECT_STREQ("foobar", s);
}
TEST_F(String8Test, removeAll) {
String8 s("Hello, world!");
// NULL input should cause an assertion failure and error message in logcat
EXPECT_DEATH(s.removeAll(NULL), "");
// expect to return true and string content should remain unchanged
EXPECT_TRUE(s.removeAll(""));
EXPECT_STREQ("Hello, world!", s);
// expect to return false
EXPECT_FALSE(s.removeAll("x"));
EXPECT_STREQ("Hello, world!", s);
EXPECT_TRUE(s.removeAll("o"));
EXPECT_STREQ("Hell, wrld!", s);
}