fix for overrun when searching backwards (spotted by Fred using valgrind)

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@36204 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2013-02-28 12:51:27 +00:00
parent 3f3350e4d7
commit 60c04b53e6
4 changed files with 36 additions and 6 deletions

View file

@ -1,3 +1,10 @@
2013-02-28 Richard Frith-Macdonald <rfm@gnu.org>
* Tests/base/NSString/test00.m: Add a few tests for searching subrange
of a string.
* Source/GSString.m: ([rangeOfCharacterFromSet:options:range:])
Fix for overrun when searching backwards ... spotted by Fred.
2013-02-17 Richard Frith-Macdonald <rfm@gnu.org>
* Source/GSAvahiRunLoopIntegration.m: Remove code which was clearing

View file

@ -646,8 +646,8 @@ GSAvahiEntryGroupStateChanged(AvahiEntryGroup *group,
if ([[self delegate] respondsToSelector:
@selector(netService:didUpdateAddresses:)])
{
[[self delegate] netService: service
didUpdateAddresses: addresses];
[(id)[self delegate] netService: service
didUpdateAddresses: addresses];
}
}
@ -680,9 +680,9 @@ didUpdateRecordData: (id)data
else if ([[self delegate] respondsToSelector:
@selector(netService:didUpdateRecordData:forRecordType:)])
{
[[self delegate] netService: service
didUpdateRecordData: data
forRecordType: rrType];
[(id)[self delegate] netService: service
didUpdateRecordData: data
forRecordType: rrType];
}
}
@ -1676,6 +1676,14 @@ didUpdateRecordData: (id)data
forRecordType: rrType];
}
#if GS_USE_AVAHI==1
- (id<NSObject,GSNetServiceDelegate>)delegate
#else
- (id<NSObject>)delegate
#endif
{
return _delegate;
}
/**
* Dispatcher method for error notifications to the delegate.

View file

@ -5638,7 +5638,7 @@ literalIsEqual(NXConstantString *self, id anObject)
buf[pos] = nextUTF8((const uint8_t *)nxcsptr, nxcslen, &i, &n);
}
index = stop;
while (index-- > 0)
while (index-- > start)
{
if ((*mImp)(aSet, @selector(characterIsMember:), buf[--pos]))
{

View file

@ -341,16 +341,31 @@ int main()
NSCaseInsensitiveSearch | NSBackwardsSearch,
NSMakeRange(0,9), NSMakeRange(8,1));
strRangeFromSet("boaboaboa",
[NSCharacterSet alphanumericCharacterSet],
NSCaseInsensitiveSearch | NSBackwardsSearch,
NSMakeRange(2,6), NSMakeRange(7,1));
strRangeFromSet("boaboaboa",
[NSCharacterSet whitespaceCharacterSet],
NSCaseInsensitiveSearch | NSBackwardsSearch,
NSMakeRange(0,9), NSMakeRange(NSNotFound,0));
strRangeFromSet("boaboaboa",
[NSCharacterSet whitespaceCharacterSet],
NSCaseInsensitiveSearch | NSBackwardsSearch,
NSMakeRange(2,6), NSMakeRange(NSNotFound,0));
strRangeFromSet("bo boaboa",
[NSCharacterSet whitespaceCharacterSet],
NSCaseInsensitiveSearch | NSBackwardsSearch,
NSMakeRange(0,9), NSMakeRange(2,1));
strRangeFromSet("bo boaboa",
[NSCharacterSet whitespaceCharacterSet],
NSCaseInsensitiveSearch | NSBackwardsSearch,
NSMakeRange(2,6), NSMakeRange(2,1));
testLineRange("This is a line of text\n", NSMakeRange(10, 10), NSMakeRange(0, 23));
testLineRange("This is a line of text\r\n", NSMakeRange(10, 10), NSMakeRange(0, 24));
testLineRange("This is a line of text\r\r", NSMakeRange(10, 10), NSMakeRange(0, 23));