From: Ulrich Drepper Date: Tue, 16 Dec 2003 18:58:47 +0000 (+0000) Subject: Update. X-Git-Tag: cvs/ChangeLog~155 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=457beec8d7835d2f021d8c4ef7a51f22932671f8;p=thirdparty%2Fglibc.git Update. 2002-12-16 Jakub Jelinek Paolo Bonzini * posix/regexec.c (group_nodes_into_DFAstates): Never produce dests_ch items that are empty. --- diff --git a/ChangeLog b/ChangeLog index ca7aa849347..f852b850a25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-12-16 Jakub Jelinek + Paolo Bonzini + + * posix/regexec.c (group_nodes_into_DFAstates): Never produce + dests_ch items that are empty. + 2003-12-14 Paolo Bonzini * posix/regexec.c (check_arrival): Remove duplicate test. diff --git a/posix/regexec.c b/posix/regexec.c index 731b49dd579..0c2f7bf3ff7 100644 --- a/posix/regexec.c +++ b/posix/regexec.c @@ -3402,30 +3402,36 @@ group_nodes_into_DFAstates (preg, state, dests_node, dests_ch) if (constraint & NEXT_WORD_CONSTRAINT) { + unsigned int any_set = 0; #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_UINTS; ++j) - accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j]); + any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); else #endif for (j = 0; j < BITSET_UINTS; ++j) - accepts[j] &= dfa->word_char[j]; + any_set |= (accepts[j] &= dfa->word_char[j]); + if (!any_set) + continue; } if (constraint & NEXT_NOTWORD_CONSTRAINT) { + unsigned int any_set = 0; #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_UINTS; ++j) - accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j]); + any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); else #endif for (j = 0; j < BITSET_UINTS; ++j) - accepts[j] &= ~dfa->word_char[j]; + any_set |= (accepts[j] &= ~dfa->word_char[j]); + if (!any_set) + continue; } } /* Then divide `accepts' into DFA states, or create a new - state. */ + state. Above, we make sure that accepts is not empty. */ for (j = 0; j < ndests; ++j) { bitset intersec; /* Intersection sets, see below. */