From 3a90e52dac2ee0a54f8083f4bff1c750344ee587 Mon Sep 17 00:00:00 2001 From: CaS Date: Tue, 5 Jun 2001 08:21:09 +0000 Subject: [PATCH] Fix for appending to C string from unicode string. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@10075 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++++ Source/GSString.m | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9cb9b94f4..3dd783222 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-06-05 Richard Frith-Macdonald + + * Source/GSString.m: ([replaceCharactersInRange:withString:]) + Fix error appending unicode string to C string. + 2001-06-01 Richard Frith-Macdonald * Source/NSString.m: Patch by David Relson applied diff --git a/Source/GSString.m b/Source/GSString.m index c0cbd949a..68e9d4b12 100644 --- a/Source/GSString.m +++ b/Source/GSString.m @@ -2582,6 +2582,7 @@ transmute(ivars self, NSString *aString) - (void) replaceCharactersInRange: (NSRange)aRange withString: (NSString*)aString { + ivars other = 0; int offset; unsigned length = 0; @@ -2600,6 +2601,16 @@ transmute(ivars self, NSString *aString) } offset = length - aRange.length; + /* + * We must change into a unicode string (if necessary) *before* + * adjusting length and capacity, so that the transmute doesn't + * mess up due to any hole in the string etc. + */ + if (length > 0) + { + other = transmute((ivars)self, aString); + } + if (offset < 0) { fillHole((ivars)self, NSMaxRange(aRange) + offset, -offset); @@ -2611,8 +2622,6 @@ transmute(ivars self, NSString *aString) if (length > 0) { - ivars other = transmute((ivars)self, aString); - if (_flags.wide == 1) { if (other == 0)