From e17d8ca302d7ebcf93b12e13581e97d6436f396c Mon Sep 17 00:00:00 2001 From: Aparajita Fishman Date: Thu, 26 May 2011 13:00:46 -0700 Subject: [PATCH] Pin ranges to valid values. --- Foundation/CPPredicate/CPComparisonPredicate.j | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Foundation/CPPredicate/CPComparisonPredicate.j b/Foundation/CPPredicate/CPComparisonPredicate.j index b5707c891..c668c9282 100644 --- a/Foundation/CPPredicate/CPComparisonPredicate.j +++ b/Foundation/CPPredicate/CPComparisonPredicate.j @@ -438,14 +438,18 @@ var CPComparisonPredicateModifier, reg = new RegExp(rhs.escapeForRegExp(),commut); return reg.test(lhs); - case CPBeginsWithPredicateOperatorType: var range = CPMakeRange(0,[rhs length]); - if (_options & CPCaseInsensitivePredicateOption) string_compare_options |= CPCaseInsensitiveSearch; - if (_options & CPDiacriticInsensitivePredicateOption) string_compare_options |= CPDiacriticInsensitiveSearch; + case CPBeginsWithPredicateOperatorType: var range = CPMakeRange(0, MIN([lhs length], [rhs length])); + if (_options & CPCaseInsensitivePredicateOption) + string_compare_options |= CPCaseInsensitiveSearch; + if (_options & CPDiacriticInsensitivePredicateOption) + string_compare_options |= CPDiacriticInsensitiveSearch; return ([lhs compare:rhs options:string_compare_options range:range] == CPOrderedSame); - case CPEndsWithPredicateOperatorType: var range = CPMakeRange([lhs length] - [rhs length],[rhs length]); - if (_options & CPCaseInsensitivePredicateOption) string_compare_options |= CPCaseInsensitiveSearch; - if (_options & CPDiacriticInsensitivePredicateOption) string_compare_options |= CPDiacriticInsensitiveSearch; + case CPEndsWithPredicateOperatorType: var range = CPMakeRange(MAX([lhs length] - [rhs length], 0), MIN([lhs length], [rhs length])); + if (_options & CPCaseInsensitivePredicateOption) + string_compare_options |= CPCaseInsensitiveSearch; + if (_options & CPDiacriticInsensitivePredicateOption) + string_compare_options |= CPDiacriticInsensitiveSearch; return ([lhs compare:rhs options:string_compare_options range:range] == CPOrderedSame); case CPCustomSelectorPredicateOperatorType: return [lhs performSelector:_customSelector withObject:rhs];