Problem reported by Clément Pit–Claudel in:
http://lists.gnu.org/archive/html/emacs-devel/2016-12/msg00654.html
* lib/regex_internal.h: Include intprops.h.
* lib/regexec.c (re_search_2_stub): Use it to avoid undefined
behavior on integer overflow.
* modules/regex (Depends-on): Add intprops.
Since 29-05-2013 commit, 55ba71f4, compilation on a non-glibc
system with GNULIB_LOCK would fail due to absence of the
included "glthread/lock.h". This would affect any package
for which the "lock" module is used only by the regex module,
and not explicitly used.
* m4/regex.m4 (gl_PREREQ_REGEX): Require gl_GLIBC21.
* modules/regex (Depends-on) [!GLIBC && $ac_use_included_regex]:
Add a dependency on the "lock" module.
Instead of depending on pthread, adapt to whatever thread
modules are in use. Problem reported by Ludovic Courtès in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-05/msg00082.html>
and by Mats Erik Andersson in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-05/msg00100.html>.
* lib/regex_internal.h (lock_define, lock_init, lock_fini):
Support either the 'lock' module, or the 'pthread' module, or
no module.
(lock_lock, lock_unlock): New macros.
* lib/regexec.c (regexec, re_search_stub): Use the new macros.
* modules/lock, modules/pthread (configure.ac): Add module indicator.
* modules/regex (Depends-on): Remove pthread.
Problem reported by Ludovic Courtès in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-05/msg00058.html>.
* lib/regex_internal.h (lock_define, lock_init, lock_fini):
New macros. All uses of __libc_lock_define, __libc_lock_init
changed to use the first two of these.
(__libc_lock_lock, __libc_lock_unlock): New macros, for
non-glibc platforms.
(struct re_dfa_t): Define the lock unconditionally.
* lib/regexec.c (regexec, re_search_stub): Remove some now-incorrect
'#ifdef _LIBC"s.
* modules/regex (Depends-on): Add pthread, if we use the
included regex.
* lib/regcomp.c: Do actions that are not needed for glibc,
but may be needed elsewhere.
(regfree, re_compile_internal): Destroy the lock.
(re_compile_internal): Check for lock-initialization failure.
See Bruno Haible's comment in <http://bugs.gnu.org/10305#120>.
* lib/regcomp.c (init_dfa): Use just ASCII case comparison
for codeset name.
* lib/regex_internal.h: Do not include <strings.h>, since we
no longer use strcasecmp.
* modules/regex (Depends-on): Remove strcase.
* lib/regcomp.c (init_dfa) [!LIBC]: Always use nl_langinfo (CODESET),
now that gnulib provides it. Recognize UTF8 as well as UTF-8.
* lib/regex_internal.h: Always include <langinfo.h>, now.
* modules/regex (Depends-on): Add nl_langinfo.
* modules/regex: Request emulations for the mb*/wc* functions we need.
* m4/regex.m4: Don't look for those functions here.
* lib/regex_internal.h: Do not check HAVE_WCRTOMB and HAVE_MBRTOWC.
* lib/regex_internal.h: Include <langinfo.h> only if _LIBC is defined.
Otherwise, include gnulib's langinfo.h.
* lib/regcomp.c (init_dfa): Don't use strcasecmp, as it can have
undesirable behavior in non-C locales. Instead, rely on locale_charset.
* m4/regex.m4 (gl_PREREQ_REGEX): Don't require AM_LANGINFO_CODESET.
* modules/regex (FILES): Remove m4/codeset.m4.
(Depends-on): Add localcharset. Remove strcase.
* lib/wctype_.h, m4/wctype.m4, modules/wctype: New files.
* lib/fnmatch.c: Don't bother to include <wchar.h> before
<wctype.h>, since the new wctype module should fix this.
* lib/quotearg.c: Include <wctype.h> unconditionally, since
the wctype module should arrange for it.
* lib/regex_internal.h: Likewise.
* m4/quotearg.m4 (gl_QUOTEARG): Don't check for wctype.h or iswprint,
since the wctype module should handle this now.
* m4/regex.m4 (gl_PREREQ_REGEX): Don't check for wctype.h.
* modules/fnmatch (Depends-on): Add wctype.
* modules/quotearg (Depends-on): Likewise.
* modules/regex (Depends-on): Likewise.
POSIX-conformance changes that were rejected and redoing them in a
less-intrusive way.
* lib/regcomp.c (re_compile_internal, init_dfa):
Length arg is now size_t, not Idx. All uses changed.
(peek_token): Forward decl now says internal_function.
(__re_error_msgid, __re_error_msgid_idx):
Now static rather than extern with attribute_hidden.
(re_compile_pattern) [!defined _LIBC]: Use K&R-style defn.
For some reason libc prefers K&R style defns for external functions.
(regerror) [!defined _LIBC]: Likewise.
(re_set_syntax, re_compile_fastmap, regcomp, regfree, re_comp):
(seek_collating_symbol_entry, lookup_collation_sequence_value):
(build_range_exp, build_collating_symbol):
Use K&R-style defn.
(re_compile_fastmap): Use '\0' to memset, not 0.
(utf8_sb_map): Make the calculations more obvious.
(init_dfa, parse_bracket_exp, build_charclass_op):
Call calloc and cast result, as glibc does.
(init_word_char, fetch_token, peek_token, peek_token_bracket):
(build_range_exp, build_collating_symbol):
Now internal functions.
* lib/regex.c [!defined _LIBC]: Allow compiling with C++ compilers.
* lib/regex.h (__USE_GNU_REGEX): New macro. Don't depend on
_REGEX_SOURCE any more; depend on _GNU_SOURCE instead.
Don't depend on VMS; depend on __VMS instead, for POSIX
namespace cleanness.
(regoff_t): Define to ssize_t, not long int.
Remove the REG_ macros named below. Instead, make the old names
(e.g., RE_BACKSLASH_ESCAPE_IN_LISTS) visible only if
__USE_GNU_REGEX.
(REG_BACKSLASH_ESCAPE_IN_LISTS):
(REG_BK_PLUS_QM, REG_CHAR_CLASSES, REG_CONTEXT_INDEP_ANCHORS):
(REG_CONTEXT_INDEP_OPS, REG_CONTEXT_INVALID_OPS):
(REG_DOT_NEWLINE, REG_DOT_NOT_NULL, REG_HAT_LISTS_NOT_NEWLINE):
(REG_INTERVALS, REG_LIMITED_OPS, REG_NEWLINE_ALT):
(REG_NO_BK_BRACES, REG_NO_BK_PARENS, REG_NO_BK_REFS):
(REG_NO_BK_VBAR, REG_NO_EMPTY_RANGES):
(REG_UNMATCHED_RIGHT_PAREN_ORD, REG_NO_POSIX_BACKTRACKING):
(REG_NO_GNU_OPS, REG_DEBUG, REG_INVALID_INTERVAL_ORD):
(REG_IGNORE_CASE, REG_CARET_ANCHORS_HERE):
(REG_CONTEXT_INVALID_DUP, REG_NO_SUB, REG_SYNTAX_EMACS):
(REG_SYNTAX_AWK, REG_SYNTAX_GNU_AWK, REG_SYNTAX_POSIX_AWK):
(REG_SYNTAX_GREP, REG_SYNTAX_EGREP, REG_SYNTAX_POSIX_EGREP):
(REG_SYNTAX_ED, REG_SYNTAX_SED, _REG_SYNTAX_POSIX_COMMON):
(REG_SYNTAX_POSIX_BASIC, REG_SYNTAX_POSIX_MINIMAL_BASIC):
(REG_SYNTAX_POSIX_EXTENDED, REG_SYNTAX_POSIX_MINIMAL_EXTENDED):
(REG_DUP_MAX, REG_UNALLOCATED, REG_REALLOCATE, REG_FIXED):
(REG_NREGS):
Remove. All uses replaced by the old RE_* names.
(RE_BACKSLASH_ESCAPE_IN_LISTS):
(RE_BK_PLUS_QM, RE_CHAR_CLASSES, RE_CONTEXT_INDEP_ANCHORS):
(RE_CONTEXT_INDEP_OPS, RE_CONTEXT_INVALID_OPS):
(RE_DOT_NEWLINE, RE_DOT_NOT_NULL, RE_HAT_LISTS_NOT_NEWLINE):
(RE_INTERVALS, RE_LIMITED_OPS, RE_NEWLINE_ALT):
(RE_NO_BK_BRACES, RE_NO_BK_PARENS, RE_NO_BK_REFS):
(RE_NO_BK_VBAR, RE_NO_EMPTY_RANGES):
(RE_UNMATCHED_RIGHT_PAREN_ORD, RE_NO_POSIX_BACKTRACKING):
(RE_NO_GNU_OPS, RE_DEBUG, RE_INVALID_INTERVAL_ORD):
(RE_IGNORE_CASE, RE_CARET_ANCHORS_HERE):
(RE_CONTEXT_INVALID_DUP, RE_NO_SUB):
Don't bother having these macros be independent of each others'
values, since they no longer exist in the POSIX name space.
Rename the following member names back to their old names,
unless !__USE_GNU_REGEX. All uses changed back.
(buffer): Renamed from re_buffer.
(allocated): Renamed from re_allocated.
(used): Renamed from re_used.
(syntax): Renamed from re_syntax.
(fastmap): Renamed from re_fastmap.
(translate): Renamed from re_translate.
(can_be_null): Renamed from re_can_be_null.
(regs_allocated): Renamed from re_regs_allocated.
(fastmap_accurate): Renamed from re_fastmap_accurate.
(no_sub): Renamed from re_no_sub.
(not_bol): Renamed from re_not_bol.
(not_eol): Renamed from re_not_eol.
(newline_anchor): Renamed from re_newline_anchor.
(num_regs): Renamed from rm_num_regs.
(start): Renamed from rm_start.
(end): Renamed from rm_end.
(free_state): Move up a bit.
* lib/regex_internal.h (inline) [__GNUC__ < 3 && defined _LIBC]:
#define to be empty.
(ASCII_CHARS): New macro, replacing all uses of 0x80 and/or SBC_MAX / 2
when that is what is intended.
(SBC_MAX): Define to UCHAR_MAX + 1, not 256.
(__re_error_msgid, __re_error_msgid_idx): Remove decls; not needed.
(MAX): New macro.
(re_xmalloc, re_calloc, re_xrealloc, re_x2realloc): Remove.
All uses changed back to re_malloc, etc. It's now the caller's
responsibility to check for overflow; all callers changed.
(re_alloc_oversized, re_x2alloc_oversized, re_xnmalloc, re_xnrealloc):
(re_x2nrealloc): Remove.
(free_state): Remove decl.
* lib/regexc.c (regexec, re_match, re_search, re_match_2, re_search_2):
(re_set_registers, re_exec):
Use K&R-style defn.
2006-01-31 Roland McGrath <roland@redhat.com>
* lib/regcomp.c (calc_eclosure_iter): Remove dead variables.
Reported by Mike Frysinger <vapier@gentoo.org>.
2006-01-15 Andreas Jaeger <aj@suse.de>
[BZ #1950]
* lib/regex_internal.c (re_string_reconstruct): Adjust for
build_wcs_upper_buffer change.
(build_wcs_upper_buffer): Change return type.
2005-12-10 Ulrich Drepper <drepper@redhat.com>
* lib/regex_internal.h: Include <stdint.h> if available.
2005-12-06 Paolo Bonzini <bonzini@gnu.org>
* lib/regex_internal.h (SIZE_MAX): Provide a default definition.
2005-10-14 Ulrich Drepper <drepper@redhat.com>
* lib/regcomp.c: Adjust for changed secondary hash function.
2005-09-30 Ulrich Drepper <drepper@redhat.com>
* lib/regex.h: Pretty printing.
Clean up namespace a bit.
2005-09-30 Jakub Jelinek <jakub@redhat.com>
* lib/regexec.c (update_cur_sifted_state, check_arrival,
check_arrival_add_next_nodes): Avoid using uninitialized variable.
2005-09-06 Paul Eggert <eggert@cs.ucla.edu>
Ulrich Drepper <drepper@redhat.com>
[BZ #1302]
* lib/regex_internal.h (bitset_t): Renamed from bitset. All uses changed.
(bitset_word_t): Renamed from bitset_word. All uses changed.
2005-09-22 Ulrich Drepper <drepper@redhat.com>
[BZ #281]
* lib/regex.h: Define RE_TRANSLATE_TYPE as unsigned char *.
* lib/regcomp.c: Remove unnecessary uses of
unsigned RE_TRANSLATE_TYPE.
* lib/regex_internal.h: Likewise.
* lib/regex_internal.c: Likewise.
* lib/regexec.c: Likewise.
Based on a patch by Stepan Kasal <kasal@ucw.cz>.
2005-09-07 Ulrich Drepper <drepper@redhat.com>
* lib/regexec.c (find_recover_state): Remove unnecessary
initialization.
(transit_state_bkref): Make DFA a const pointer.
(get_subexp): Likewise.
(check_arrival): Likewise.
(update_cur_sifted_state): Likewise.
(re_search_internal): Likewise.
(prune_impossible_nodes): Likewise.
(acquire_init_state_context): Likewise.
(proceed_next_node): Likewise.
(set_regs): Likewise.
(free_fail_stack_return): Likewise.
(check_arrival_expand_ecl): Mark DFA parameter as const.
(check_arrival_expand_ecl_sub): Likewise.
(check_subexp_limits): Likewise.
(sub_epsilon_src_nodes): Likewise.
(add_epsilon_src_nodes): Likewise.
(merge_state_array): Likewise.
(update_regs): Likewise.
(build_trtable): Likewise.
(sift_states_backward): Mark MCTX parameter as const.
(build_sifted_states): Likewise.
(update_cur_sifted_state): Likewise.
(sift_states_mkref): Likewise.
(check_arrival_expand_ecl): Mark eclosure as const.
(check_dst_limits_calc_pos_1): Likewise.
* lib/regex_internal.h (re_match_context_t): Make dfa a const
pointer.
2005-09-06 Ulrich Drepper <drepper@redhat.com>
* lib/regexec.c (merge_state_with_log): Define dfa as const pointer.
(transit_state_sb): Likewise.
(transit_state_mb): Likewise.
(sift_states_iter_mb): Likewise.
(check_arrival_add_next_nodes): Likewise.
(check_node_accept_bytes): Change first parameter to pointer-to-const.
[_LIBC] (re_search_2_stub): Use mempcpy.
* lib/regex_internal.c (re_string_reconstruct): Avoid calling
mbrtowc for very simple UTF-8 case.
* lib/regex_internal.c (re_acquire_state): Make DFA pointer arg
a pointer-to-const.
(re_acquire_state_context): Likewise.
* lib/regex_internal.h: Adjust prototypes.
* lib/regex.c: Prevent using C++ compilers.
* lib/regex_internal.c (re_acquire_state): Minor code rearrangement.
(re_acquire_state_context): Likewise.
lib/regex_internal.h, lib/regexec.c, lib/regcomp.c, m4/codeset.m4.
(Depends-on): Add extensions.
(Makefile.am): Remove lib_SOURCES; now done by m4 code.
* config/srclist.txt: Add regcomp.c, regex.c, regex.h, regex_internal.c,
regexec.c.
Add regex_internal.h too, but as a comment, since the libc version
is currently broken in gnulib mode.
* lib/regex.c, lib/regex.h: Sync from libc.
* lib/regcomp.c, lib/regexec_internal.c, lib/regex_internal.h, lib/regexec.c:
New files, synced from libc, except that regex_internal.h
currently has a small porting fix.
* m4/regex.m4: Adjust to new libc regex implementation.
(gl_INCLUDED_REGEX): Add AC_LIBSOURCES for
all the .c and .h parts of (the new) regex.
Quote the m4 stuff better.
Check for RE_ICASE bug of old gnulib.
Check for REG_STARTEND of recent libc.
Rename local variables from jm_* to gl_*.
Quote operand of "test -f".
Say "recent enough" version of libc, not "version 2".
(gl_PREREQ_REGEX): Remove AC_FUNC_ALLOCA, since alloca is a
prerequisite module. Remove AC_HEADER_STDC; no longer needed.
Check for locale.h, isblank, mbrtowc, wcrtomb, wcscoll.
Remove check for btowc, isascii.
Require AM_LANGINFO_CODESET.