From a1748ffc6053f0607dbb880997debcde58195e7e Mon Sep 17 00:00:00 2001 From: rfm Date: Fri, 2 Mar 2012 19:01:30 +0000 Subject: [PATCH] compatibiulity fix for 35699 git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@34865 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++++ Source/GSString.m | 32 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index b9b465922..9ff86c908 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-03-02 Richard Frith-Macdonald + + * Source/GSString.m: Compatribility fix ... copy strings implicitly + when taking a substring of a string whose buffer is not owned. + 2012-03-02 Richard Frith-Macdonald * Source/NSURLConnection.m: Compatibility fix for bug #35686 diff --git a/Source/GSString.m b/Source/GSString.m index cc3e1fda8..255e027b5 100644 --- a/Source/GSString.m +++ b/Source/GSString.m @@ -3768,14 +3768,22 @@ agree, create a new GSCInlineString otherwise. - (NSString*) substringFromRange: (NSRange)aRange { - GS_RANGE_CHECK(aRange, _count); - return substring_c((GSStr)self, aRange); + if (_flags.owned) + { + GS_RANGE_CHECK(aRange, _count); + return substring_c((GSStr)self, aRange); + } + return [super substringWithRange: aRange]; } - (NSString*) substringWithRange: (NSRange)aRange { - GS_RANGE_CHECK(aRange, _count); - return substring_c((GSStr)self, aRange); + if (_flags.owned) + { + GS_RANGE_CHECK(aRange, _count); + return substring_c((GSStr)self, aRange); + } + return [super substringWithRange: aRange]; } - (id) uppercaseString @@ -4106,14 +4114,22 @@ agree, create a new GSCInlineString otherwise. - (NSString*) substringFromRange: (NSRange)aRange { - GS_RANGE_CHECK(aRange, _count); - return substring_u((GSStr)self, aRange); + if (_flags.owned) + { + GS_RANGE_CHECK(aRange, _count); + return substring_u((GSStr)self, aRange); + } + return [super substringWithRange: aRange]; } - (NSString*) substringWithRange: (NSRange)aRange { - GS_RANGE_CHECK(aRange, _count); - return substring_u((GSStr)self, aRange); + if (_flags.owned) + { + GS_RANGE_CHECK(aRange, _count); + return substring_u((GSStr)self, aRange); + } + return [super substringWithRange: aRange]; } - (id) uppercaseString