From 62b0b64124aa1eb9007ecbeae69938e99aeae4d6 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 20 Jun 2013 10:30:08 +0200 Subject: [PATCH] BStringList::Add(): fix ref counting problem Handle the case that the private data of the given string is not shareable. --- src/kits/support/StringList.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/kits/support/StringList.cpp b/src/kits/support/StringList.cpp index 8d51f3f0af..fe6e138ac0 100644 --- a/src/kits/support/StringList.cpp +++ b/src/kits/support/StringList.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de + * Copyright 2011-2013, Ingo Weinhold, ingo_weinhold@gmx.de * Copyright 2011, Clemens Zeidler * * Distributed under the terms of the MIT License. @@ -55,8 +55,13 @@ BStringList::~BStringList() bool -BStringList::Add(const BString& string, int32 index) +BStringList::Add(const BString& _string, int32 index) { + BString string(_string); + // makes sure the string is shareable + if (string.Length() != _string.Length()) + return false; + char* privateData = BString::Private(string).Data(); if (!fStrings.AddItem(privateData, index)) return false; @@ -67,8 +72,13 @@ BStringList::Add(const BString& string, int32 index) bool -BStringList::Add(const BString& string) +BStringList::Add(const BString& _string) { + BString string(_string); + // makes sure the string is shareable + if (string.Length() != _string.Length()) + return false; + char* privateData = BString::Private(string).Data(); if (!fStrings.AddItem(privateData)) return false;