mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:48:10 +00:00
AK: Unref old m_data in String's move assignment
We were overridding the data pointer without unreffing it, causing a memory leak when assigning a String.
This commit is contained in:
parent
741138c585
commit
58f5deba70
2 changed files with 10 additions and 0 deletions
|
@ -181,6 +181,9 @@ String::String(String&& other)
|
||||||
|
|
||||||
String& String::operator=(String&& other)
|
String& String::operator=(String&& other)
|
||||||
{
|
{
|
||||||
|
if (!is_short_string())
|
||||||
|
m_data->unref();
|
||||||
|
|
||||||
m_data = exchange(other.m_data, nullptr);
|
m_data = exchange(other.m_data, nullptr);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,13 @@ TEST_CASE(construct_empty)
|
||||||
EXPECT_EQ(empty, ""sv);
|
EXPECT_EQ(empty, ""sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE(move_assignment)
|
||||||
|
{
|
||||||
|
String string1 = MUST(String::from_utf8("hello"sv));
|
||||||
|
string1 = MUST(String::from_utf8("friends!"sv));
|
||||||
|
EXPECT_EQ(string1, "friends!"sv);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE(short_strings)
|
TEST_CASE(short_strings)
|
||||||
{
|
{
|
||||||
#ifdef AK_ARCH_64_BIT
|
#ifdef AK_ARCH_64_BIT
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue