mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 09:48:11 +00:00
LibRegex: Check inverse_matched after every op, not just at the end
Fixes #13755. Co-Authored-By: Damien Firmenich <fir.damien@gmail.com>
This commit is contained in:
parent
a79896bb44
commit
1409a48da6
2 changed files with 20 additions and 2 deletions
|
@ -458,16 +458,18 @@ ALWAYS_INLINE ExecutionResult OpCode_Compare::execute(MatchInput const& input, M
|
|||
|
||||
auto compare_type = (CharacterCompareType)m_bytecode->at(offset++);
|
||||
|
||||
if (compare_type == CharacterCompareType::Inverse)
|
||||
if (compare_type == CharacterCompareType::Inverse) {
|
||||
inverse = true;
|
||||
continue;
|
||||
|
||||
else if (compare_type == CharacterCompareType::TemporaryInverse) {
|
||||
} else if (compare_type == CharacterCompareType::TemporaryInverse) {
|
||||
// If "TemporaryInverse" is given, negate the current inversion state only for the next opcode.
|
||||
// it follows that this cannot be the last compare element.
|
||||
VERIFY(i != arguments_count() - 1);
|
||||
|
||||
temporary_inverse = true;
|
||||
reset_temp_inverse = false;
|
||||
continue;
|
||||
|
||||
} else if (compare_type == CharacterCompareType::Char) {
|
||||
u32 ch = m_bytecode->at(offset++);
|
||||
|
@ -598,6 +600,11 @@ ALWAYS_INLINE ExecutionResult OpCode_Compare::execute(MatchInput const& input, M
|
|||
VERIFY_NOT_REACHED();
|
||||
break;
|
||||
}
|
||||
|
||||
if (current_inversion_state() && !inverse_matched) {
|
||||
advance_string_position(state, input.view);
|
||||
inverse_matched = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (current_inversion_state() && !inverse_matched)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue