mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:37:37 +00:00
LibRegex: Consider the inverse=true case when finding pattern overlap
Previously we were only checking for overlap when the range wasn't in inverse mode, which made us miss things like /[^x]x/; this patch makes it so we don't miss that.
This commit is contained in:
parent
936a9fd759
commit
af441bb939
2 changed files with 5 additions and 3 deletions
|
@ -251,7 +251,7 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa
|
|||
return true;
|
||||
break;
|
||||
case CharacterCompareType::Char:
|
||||
if (!current_lhs_inversion_state() && range_contains(pair.value))
|
||||
if (current_lhs_inversion_state() ^ range_contains(pair.value))
|
||||
return true;
|
||||
break;
|
||||
case CharacterCompareType::String:
|
||||
|
@ -259,12 +259,12 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa
|
|||
// Just bail out to avoid false positives.
|
||||
return true;
|
||||
case CharacterCompareType::CharClass:
|
||||
if (!current_lhs_inversion_state() && char_class_contains(static_cast<CharClass>(pair.value)))
|
||||
if (current_lhs_inversion_state() ^ char_class_contains(static_cast<CharClass>(pair.value)))
|
||||
return true;
|
||||
break;
|
||||
case CharacterCompareType::CharRange: {
|
||||
auto range = CharRange(pair.value);
|
||||
if (!current_lhs_inversion_state() && range_contains(range))
|
||||
if (current_lhs_inversion_state() ^ range_contains(range))
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue