This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
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.
Attachment:
patch.020927.gz
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |