Bug 1185589 - Properly handle self-assignment in nsTArray::operator=. r=mccr8

This commit is contained in:
Birunthan Mohanathas 2015-07-21 09:42:58 -07:00
Родитель 4bd37db746
Коммит 4db7ee5707
2 изменённых файлов: 19 добавлений и 4 удалений

Просмотреть файл

@ -882,7 +882,9 @@ public:
// @param aOther The array object to copy.
self_type& operator=(const self_type& aOther)
{
ReplaceElementsAt(0, Length(), aOther.Elements(), aOther.Length());
if (this != &aOther) {
ReplaceElementsAt(0, Length(), aOther.Elements(), aOther.Length());
}
return *this;
}
@ -891,8 +893,10 @@ public:
// @param other The array object to move from.
self_type& operator=(self_type&& aOther)
{
Clear();
SwapElements(aOther);
if (this != &aOther) {
Clear();
SwapElements(aOther);
}
return *this;
}

Просмотреть файл

@ -35,7 +35,7 @@ const nsTArray<int>& FakeHugeArray()
}
#endif
TEST(TArray, assign)
TEST(TArray, Assign)
{
nsTArray<int> array;
array.Assign(DummyArray());
@ -54,4 +54,15 @@ TEST(TArray, assign)
ASSERT_EQ(DummyArray(), array2);
}
TEST(TArray, AssignmentOperatorSelfAssignment)
{
nsTArray<int> array;
array = DummyArray();
array = array;
ASSERT_EQ(DummyArray(), array);
array = Move(array);
ASSERT_EQ(DummyArray(), array);
}
} // namespace TestTArray