mirror of
https://sourceware.org/git/glibc.git
synced 2025-06-06 11:41:02 +03:00
(re_search_internal): Limit search to the beginning of the buffer if the initial states are empty for contexts that do not include CONTEXT_BEGBUF or, if !preg->newline_anchor, that do not include any one of CONTEXT_BEGBUF and CONTEXT_NEWLINE.
This commit is contained in:
parent
219ebb6d8d
commit
c70f81dd2c
@ -597,6 +597,24 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
|
|||||||
|| dfa->init_state_begbuf == NULL, 0))
|
|| dfa->init_state_begbuf == NULL, 0))
|
||||||
return REG_NOMATCH;
|
return REG_NOMATCH;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
/* We assume front-end functions already check them. */
|
||||||
|
assert (start + range >= 0 && start + range <= length);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If initial states with non-begbuf contexts have no elements,
|
||||||
|
the regex must be anchored. If preg->newline_anchor is set,
|
||||||
|
we'll never use init_state_nl, so do not check it. */
|
||||||
|
if (dfa->init_state->nodes.nelem == 0
|
||||||
|
&& dfa->init_state_word->nodes.nelem == 0
|
||||||
|
&& (dfa->init_state_nl->nodes.nelem == 0
|
||||||
|
|| !preg->newline_anchor))
|
||||||
|
{
|
||||||
|
if (start != 0 && start + range != 0)
|
||||||
|
return REG_NOMATCH;
|
||||||
|
start = range = 0;
|
||||||
|
}
|
||||||
|
|
||||||
re_node_set_init_empty (&empty_set);
|
re_node_set_init_empty (&empty_set);
|
||||||
memset (&mctx, '\0', sizeof (re_match_context_t));
|
memset (&mctx, '\0', sizeof (re_match_context_t));
|
||||||
|
|
||||||
@ -630,11 +648,6 @@ re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch,
|
|||||||
else
|
else
|
||||||
mctx.state_log = NULL;
|
mctx.state_log = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
/* We assume front-end functions already check them. */
|
|
||||||
assert (start + range >= 0 && start + range <= length);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
match_first = start;
|
match_first = start;
|
||||||
input.tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
|
input.tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
|
||||||
: CONTEXT_NEWLINE | CONTEXT_BEGBUF);
|
: CONTEXT_NEWLINE | CONTEXT_BEGBUF);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user