# HG changeset patch # User Paul Eggert # Date 1144966452 0 # Node ID 1c9a307d93bd5031552fe36b40d9da747865a133 # Parent 9d91ed0c451550765a3572d90e4ee31389a6785d * regcomp.c (init_dfa): Don't use wchar_t or wctype_t if RE_ENABLE_I18N is not defined. Problem reported by Mark D. Baushke via Derek R. Price. * regex.h (RE_DUP_MAX): Update comment to match current implementation. diff --git a/lib/ChangeLog b/lib/ChangeLog --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,9 @@ +2006-04-13 Paul Eggert + + * regcomp.c (init_dfa): Don't use wchar_t or wctype_t if RE_ENABLE_I18N + is not defined. Problem reported by Mark D. Baushke via Derek R. Price. + * regex.h (RE_DUP_MAX): Update comment to match current implementation. + 2006-04-09 Paul Eggert Merge regex changes from libc, removing some of our diff --git a/lib/regcomp.c b/lib/regcomp.c --- a/lib/regcomp.c +++ b/lib/regcomp.c @@ -836,15 +836,17 @@ #ifndef _LIBC char *codeset_name; #endif +#ifdef RE_ENABLE_I18N + size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); +#else + size_t max_i18n_object_size = 0; +#endif size_t max_object_size = MAX (sizeof (struct re_state_table_entry), MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), MAX (sizeof (regmatch_t), - MAX (sizeof (regoff_t), - MAX (sizeof (wchar_t), - MAX (sizeof (wctype_t), - sizeof (Idx)))))))); + max_i18n_object_size)))); memset (dfa, '\0', sizeof (re_dfa_t)); diff --git a/lib/regex.h b/lib/regex.h --- a/lib/regex.h +++ b/lib/regex.h @@ -322,7 +322,14 @@ # ifdef RE_DUP_MAX # undef RE_DUP_MAX # endif -/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ + +/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored + the counter as a 2-byte signed integer. This is no longer true, so + RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to + ((SIZE_MAX - 2) / 10 - 1) if _REGEX_LARGE_OFFSETS is defined. + However, there would be a huge performance problem if someone + actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains + its historical value. */ # define RE_DUP_MAX (0x7fff) #endif /* defined __USE_GNU_REGEX */