diff --git a/Source/GSString.m b/Source/GSString.m index 41630449e..17b6e3291 100644 --- a/Source/GSString.m +++ b/Source/GSString.m @@ -1155,11 +1155,6 @@ compare_c(GSStr self, NSString *aString, unsigned mask, NSRange aRange) { Class c; - if (aString == nil) - [NSException raise: NSInvalidArgumentException format: @"compare with nil"]; - if (GSObjCIsInstance(aString) == NO) - return strCompCsNs((id)self, aString, mask, aRange); - c = GSObjCClass(aString); if (GSObjCIsKindOf(c, GSUnicodeStringClass) == YES || (c == GSMutableStringClass && ((GSStr)aString)->_flags.wide == 1)) @@ -1177,11 +1172,6 @@ compare_u(GSStr self, NSString *aString, unsigned mask, NSRange aRange) { Class c; - if (aString == nil) - [NSException raise: NSInvalidArgumentException format: @"compare with nil"]; - if (GSObjCIsInstance(aString) == NO) - return strCompUsNs((id)self, aString, mask, aRange); - c = GSObjCClass(aString); if (GSObjCIsKindOf(c, GSUnicodeStringClass) || (c == GSMutableStringClass && ((GSStr)aString)->_flags.wide == 1)) @@ -2830,6 +2820,15 @@ transmute(GSStr self, NSString *aString) options: (unsigned int)mask range: (NSRange)aRange { + GS_RANGE_CHECK(aRange, _count); + if (aString == nil) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] nil string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; + if (GSObjCIsInstance(aString) == NO) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] not a string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; return compare_c((GSStr)self, aString, mask, aRange); } @@ -3151,6 +3150,15 @@ agree, create a new GSCInlineString otherwise. options: (unsigned int)mask range: (NSRange)aRange { + GS_RANGE_CHECK(aRange, _count); + if (aString == nil) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] nil string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; + if (GSObjCIsInstance(aString) == NO) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] not a string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; return compare_u((GSStr)self, aString, mask, aRange); } @@ -3543,6 +3551,15 @@ agree, create a new GSUnicodeInlineString otherwise. options: (unsigned int)mask range: (NSRange)aRange { + GS_RANGE_CHECK(aRange, _count); + if (aString == nil) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] nil string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; + if (GSObjCIsInstance(aString) == NO) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] not a string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; if (_flags.wide == 1) return compare_u((GSStr)self, aString, mask, aRange); else @@ -4662,6 +4679,15 @@ NSAssert(_flags.free == 1 && _zone != 0, NSInternalInconsistencyException); options: (unsigned int)mask range: (NSRange)aRange { + GS_RANGE_CHECK(aRange, ((GSStr)_parent)->_count); + if (aString == nil) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] nil string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; + if (GSObjCIsInstance(aString) == NO) + [NSException raise: NSInvalidArgumentException + format: @"[%@ -%@] not a string argument", + NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; if (((GSStr)_parent)->_flags.wide == 1) return compare_u((GSStr)_parent, aString, mask, aRange); else diff --git a/Source/NSString.m b/Source/NSString.m index aa04d99a5..90e2f9819 100644 --- a/Source/NSString.m +++ b/Source/NSString.m @@ -1918,6 +1918,7 @@ handle_printf_atsign (FILE *stream, options: (unsigned int)mask range: (NSRange)aRange { + GS_RANGE_CHECK(aRange, [self length]); if (aString == nil) [NSException raise: NSInvalidArgumentException format: @"compare with nil"]; return strCompNsNs(self, aString, mask, aRange);