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