Merge "String8: fix infinite loop and segmentation fault in removeAll()" into main
This commit is contained in:
commit
4a33c22c77
2 changed files with 23 additions and 0 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue