]> granicus.if.org Git - taglib/commitdiff
Detach before appending a character
authorLukáš Lalinský <lalinsky@gmail.com>
Wed, 25 Mar 2009 17:52:23 +0000 (17:52 +0000)
committerLukáš Lalinský <lalinsky@gmail.com>
Wed, 25 Mar 2009 17:52:23 +0000 (17:52 +0000)
git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@944552 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

taglib/toolkit/tstring.cpp
tests/test_string.cpp

index 79b564fa61f58b7f52e876967bec2d08dea1d320..fa93c4cf37a05d11a36ff13c02fbdac658248bf5 100644 (file)
@@ -560,6 +560,8 @@ String &String::operator+=(wchar_t c)
 
 String &String::operator+=(char c)
 {
+  detach();
+
   d->data += uchar(c);
   return *this;
 }
index b1b2c83df65f87060a6a6ec42169d18ba40708ed..c3b42ea4101b5e8da4468b27ea64f4206fed03d5 100644 (file)
@@ -37,6 +37,8 @@ class TestString : public CppUnit::TestFixture
   CPPUNIT_TEST(testUTF16Decode);
   CPPUNIT_TEST(testUTF16DecodeInvalidBOM);
   CPPUNIT_TEST(testUTF16DecodeEmptyWithBOM);
+  CPPUNIT_TEST(testAppendCharDetach);
+  CPPUNIT_TEST(testAppendStringDetach);
   CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -131,6 +133,24 @@ public:
     CPPUNIT_ASSERT_EQUAL(String(), String(b, String::UTF16));
   }
 
+  void testAppendStringDetach()
+  {
+    String a("a");
+    String b = a;
+    a += "b";
+    CPPUNIT_ASSERT_EQUAL(String("ab"), a);
+    CPPUNIT_ASSERT_EQUAL(String("a"), b);
+  }
+
+  void testAppendCharDetach()
+  {
+    String a("a");
+    String b = a;
+    a += 'b';
+    CPPUNIT_ASSERT_EQUAL(String("ab"), a);
+    CPPUNIT_ASSERT_EQUAL(String("a"), b);
+  }
+
 };
 
 CPPUNIT_TEST_SUITE_REGISTRATION(TestString);