From 36911f0d3ab1a4c190a4d5cbe7c2db225a455389 Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Thu, 30 May 2024 16:41:37 +0200 Subject: [PATCH] regexp: fix non greedy quantizers with zero length matches --- libregexp.c | 14 ++++++-------- tests/test_builtin.js | 2 ++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libregexp.c b/libregexp.c index 1091506..a2d56a7 100644 --- a/libregexp.c +++ b/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/tests/test_builtin.js b/tests/test_builtin.js index 03a56ac..15cd189 100644 --- a/tests/test_builtin.js +++ b/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()