Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a33c22c authored by Eric Miao's avatar Eric Miao Committed by Gerrit Code Review
Browse files

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

parents f161ee27 c6ce48ef
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -393,6 +393,11 @@ ssize_t String8::find(const char* other, size_t start) const
}
}


bool String8::removeAll(const char* other) {
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);
    ssize_t index = find(other);
    if (index < 0) return false;
    if (index < 0) return false;


+18 −0
Original line number Original line Diff line number Diff line
@@ -114,3 +114,21 @@ TEST_F(String8Test, append) {
    EXPECT_EQ(NO_MEMORY, s.append("baz", SIZE_MAX));
    EXPECT_EQ(NO_MEMORY, s.append("baz", SIZE_MAX));
    EXPECT_STREQ("foobar", s);
    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);
}