[PATCH] Testcase for another regex bug]
Isamu Hasegawa
isamu@yamato.ibm.com
Fri Sep 27 08:32:00 GMT 2002
Hi,
Subject: [PATCH] Testcase for another regex bug
From: Jakub Jelinek <jakub@redhat.com>
> > Jack Howarth wrote:
> > > Ulrich,
> > > While the new patch fixes bug-regex11.c, it doesn't seem to fix
> > > the make check failure in sed 3.02 when built with..
> >
> > Then come up with a new test case.
>
> Here it is. tests[2] fails to match.
I'm sorry for being late...
I prepared a patch to fix the problem.
The problem was that there are some defects in the evaluations of back
references. And I needed to restructure these evaluations.
(I'm sorry for such a big patch.)
However, it might not be a sufficient patch, since dc.sed of sed-3.02
seems to fall infinite loop.
On the other hand, perhaps it might not be a bug, because the infinite
loop of dc.sed seems not to be in regex but in the dc.sed script, and
the behavior of regex was a bit changed from old regex.
(e.g. Executing the following command returns the result "NG".
$ echo aa | sed 's/\(a\+\)\{3\}/NG/'
However, "\(a\+\)\{3\}" shouldn't match with "aa", should it?
We fix these some dubious behaviors, and it might prevent dc.se
from desirable behavior.)
Then if you see other problems, please let me know.
2002-09-27 Isamu Hasegawa <isamu@yamato.ibm.com>
* posix/regcomp.c (reg_free): Free the debug area.
(re_compile_internal): Allocate debug area for the input string.
(create_initial_state): Check the back references in initial states
if they are really match null string in the initial state.
(parse_reg_exp): Mark the dfa that the dfa can have plural matchings.
(parse_expression): Likewise.
(parse_bracket_exp): Likewise.
* posix/regex_internal.c (re_node_set_intersect): Remove unused
function.
(re_node_set_contains): Change to return the index of node.
* posix/regex_internal.h (re_backref_cache_entry): Change the members.
(re_match_context_t): Likewise.
(struct re_dfa_t): Likewise.
(re_sift_context_t): New structure.
* posix/regexec.c (match_ctx_clear_flag): New function.
(sift_ctx_init): Likewise.
(update_cur_sifted_state): Likewise.
(add_epsilon_src_nodes): Likewise.
(sub_epsilon_src_nodes): Likewise.
(check_subexp_limits): Likewise.
(search_subexp): Likewise.
(sift_states_bkref): Likewise.
(merge_state_array): Likewise.
(sift_states_iter_bkref): Remove unused function.
(add_epsilon_backreference): Remove unused function.
(re_search_internal): Adapt new members and interfaces.
(check_matching): Check the back references in initial states
if they are really match null string in the initial state.
(proceed_next_node): Change the evaluation of back references,
since we have real registers here.
(set_regs): Adapt new interface of proceed_next_node.
(sift_states_backward): Add invocation of update_cur_sifted_state
instead of add_epsilon_backreference.
Add a sentinel to the outermost while loop.
Move the handling of back references to sift_states_bkref function,
since we can't handle some back references (e.g. a back reference
which match NULL string) here.
(transit_state_mb): Handle the new member max_mb_elem_len.
(transit_state_bkref_loop): Move the evaluation of back references to
search_subexp function, since we can't evaluate some back references
(e.g. a back reference which can have plural matchings) here.
(match_ctx_init): Adapt the new member.
(match_ctx_add_entry): Adapt the new members.
Thanks,
--
Isamu Hasegawa
IBM Japan, Ltd.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.020927.gz
Type: application/octet-stream
Size: 10638 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20020927/2b72a4bb/attachment.obj>
More information about the Libc-alpha
mailing list