From d5088db4750631fea5d464ff70b7ff4658c93d21 Mon Sep 17 00:00:00 2001 From: rfm Date: Fri, 14 Oct 2011 10:57:40 +0000 Subject: [PATCH] fix initialisation bug git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@33982 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 2 ++ Source/NSScanner.m | 28 +++++++++------------------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 49c5313c9..4e0cbcf1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2011-10-14 Richard Frith-Macdonald * Source/GSString.m: Implement -hash for literal UTF-8 performance. + * Source/NSScanner.m: Fix initialisation bug which could cause + scanning to fail on some strings. 2011-10-12 Richard Frith-Macdonald diff --git a/Source/NSScanner.m b/Source/NSScanner.m index 2da5732cb..301923301 100644 --- a/Source/NSScanner.m +++ b/Source/NSScanner.m @@ -201,35 +201,20 @@ typedef GSString *ivars; } c = object_getClass(aString); + if (GSObjCIsKindOf(c, GSMutableStringClass) == YES) + { + _string = [_holder initWithString: aString]; + } if (GSObjCIsKindOf(c, GSUnicodeStringClass) == YES) { - _isUnicode = YES; _string = RETAIN(aString); } else if (GSObjCIsKindOf(c, GSCStringClass) == YES) { - _isUnicode = NO; _string = RETAIN(aString); } - else if (GSObjCIsKindOf(c, GSMutableStringClass) == YES) - { - if (((ivars)aString)->_flags.wide == 1) - { - _isUnicode = YES; - _string = [_holder initWithCharacters: ((ivars)aString)->_contents.u - length: ((ivars)aString)->_count]; - } - else - { - _isUnicode = NO; - _string = [_holder initWithBytes: ((ivars)aString)->_contents.c - length: ((ivars)aString)->_count - encoding: internalEncoding]; - } - } else if ([aString isKindOfClass: NSStringClass]) { - _isUnicode = YES; _string = [_holder initWithString: aString]; } else @@ -238,6 +223,11 @@ typedef GSString *ivars; NSLog(@"Scanner initialised with something not a string"); return nil; } + c = object_getClass(_string); + if (GSObjCIsKindOf(c, GSUnicodeStringClass) == YES) + { + _isUnicode = YES; + } [self setCharactersToBeSkipped: defaultSkipSet]; _decimal = '.'; return self;