From 985ff1e26eb4cbc8853adddaa70f45eda424da94 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 9 Aug 2016 01:07:59 +0200 Subject: [PATCH] Check for self-assignment in wxArrayString Assigning array to itself destroyed its contents -- check for this now. Closes #17619. --- src/common/arrstr.cpp | 7 +++++++ tests/arrays/arrays.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/common/arrstr.cpp b/src/common/arrstr.cpp index 94b64722ec..5a995d86c1 100644 --- a/src/common/arrstr.cpp +++ b/src/common/arrstr.cpp @@ -89,7 +89,14 @@ wxArrayString::wxArrayString(const wxArrayString& src) wxArrayString& wxArrayString::operator=(const wxArrayString& src) { if ( m_nSize > 0 ) + { + // Do this test here to avoid unnecessary overhead when assigning to an + // empty array, in that case there is no harm in self-assignment. + if ( &src == this ) + return *this; + Clear(); + } Copy(src); diff --git a/tests/arrays/arrays.cpp b/tests/arrays/arrays.cpp index 769f9aad30..db6a63eb88 100644 --- a/tests/arrays/arrays.cpp +++ b/tests/arrays/arrays.cpp @@ -350,6 +350,13 @@ void ArraysTestCase::wxStringArrayTest() wxArrayString a6; a6.Add("Foo"); a6.Insert(a6[0], 1, 100); + + wxArrayString a7; + a7 = a7; + CPPUNIT_ASSERT_EQUAL( 0, a7.size() ); + a7.Add("Bar"); + a7 = a7; + CPPUNIT_ASSERT_EQUAL( 1, a7.size() ); } void ArraysTestCase::SortedArray()