commit 92135366e5abc9d2bffd049576fc3fd4f960208e
parent 77bbf853b421bceef2f5dc5ebeaccceddcaed7d0
Author: Fabrice Bellard <fabrice@bellard.org>
Date: Thu, 30 May 2024 16:41:37 +0200
regexp: fix non greedy quantizers with zero length matches
Diffstat:
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/quickjs/libregexp.c b/quickjs/libregexp.c
@@ -1488,15 +1488,13 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir)
if (dbuf_error(&s->byte_code))
goto out_of_memory;
- /* the spec tells that if there is no advance when
- running the atom after the first quant_min times,
- then there is no match. We remove this test when we
- are sure the atom always advances the position. */
- add_zero_advance_check = re_need_check_advance(s->byte_code.buf + last_atom_start,
- s->byte_code.size - last_atom_start);
- } else {
- add_zero_advance_check = FALSE;
}
+ /* the spec tells that if there is no advance when
+ running the atom after the first quant_min times,
+ then there is no match. We remove this test when we
+ are sure the atom always advances the position. */
+ add_zero_advance_check = re_need_check_advance(s->byte_code.buf + last_atom_start,
+ s->byte_code.size - last_atom_start);
{
int len, pos;
diff --git a/quickjs/tests/test_builtin.js b/quickjs/tests/test_builtin.js
@@ -678,6 +678,8 @@ function test_regexp()
assert(a, ["a", undefined]);
a = /(?:|[\w])+([0-9])/.exec("123a23");
assert(a, ["123a23", "3"]);
+ a = /()*?a/.exec(",");
+ assert(a, null);
}
function test_symbol()