Search whole range for safe parser detection
This commit is contained in:
@@ -33,7 +33,7 @@
|
|||||||
@implementation RSXMLData
|
@implementation RSXMLData
|
||||||
|
|
||||||
static const NSUInteger minNumberOfBytesToSearch = 20;
|
static const NSUInteger minNumberOfBytesToSearch = 20;
|
||||||
static const NSInteger numberOfCharactersToSearch = 4096;
|
static const NSUInteger numberOfCharactersToSearch = 4096;
|
||||||
|
|
||||||
- (instancetype)initWithData:(NSData *)data urlString:(NSString *)urlString {
|
- (instancetype)initWithData:(NSData *)data urlString:(NSString *)urlString {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
@@ -158,17 +158,13 @@ static const NSInteger numberOfCharactersToSearch = 4096;
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSRange rangeToSearch = NSMakeRange(0, numberOfCharactersToSearch);
|
NSRange wholeRange = NSMakeRange(0, s.length);
|
||||||
if (s.length < numberOfCharactersToSearch) {
|
|
||||||
rangeToSearch.length = s.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Class parserClass in [self listOfParserClasses]) {
|
for (Class parserClass in [self listOfParserClasses]) {
|
||||||
NSArray<const NSString *> *tags = [parserClass parserRequireOrderedTags];
|
NSArray<const NSString *> *tags = [parserClass parserRequireOrderedTags];
|
||||||
|
|
||||||
NSUInteger oldPos = 0;
|
NSUInteger oldPos = 0;
|
||||||
for (NSString *tag in tags) {
|
for (NSString *tag in tags) {
|
||||||
NSUInteger newPos = [s rangeOfString:tag options:NSCaseInsensitiveSearch range:rangeToSearch].location;
|
NSUInteger newPos = [s rangeOfString:tag options:NSCaseInsensitiveSearch range:wholeRange].location;
|
||||||
if (newPos == NSNotFound || newPos < oldPos) {
|
if (newPos == NSNotFound || newPos < oldPos) {
|
||||||
oldPos = NSNotFound;
|
oldPos = NSNotFound;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user