Hello Simon, it seems to me that the bug which the test code tries to trigger never got fixed?
https://sourceware.org/bugzilla/show_bug.cgi?id=11053 Regards, Michael Brunnbauer On Mon, Sep 13, 2021 at 11:44:25AM +0200, Michael Brunnbauer wrote: > > Hello Simon, > > here is a minimal example. This looks more like a bug in glibc: > > #define _GNU_SOURCE 1 > > #include <regex.h> > #include <locale.h> > #include <limits.h> > #include <string.h> > #include <signal.h> > #include <unistd.h> > #include <malloc.h> > > int main() > { > static struct re_pattern_buffer regex; > int i; > const char *s; > struct re_registers regs; > > /* glibc bug 11053. */ > re_set_syntax (RE_SYNTAX_POSIX_BASIC); > memset (®ex, 0, sizeof regex); > static char const pat_sub2[] = "\\(a*\\)*a*\\1"; > s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); > if (s) return 123; > memset (®s, 0, sizeof regs); > static char const data[] = "a"; > int datalen = sizeof data - 1; > i = re_search (®ex, data, datalen, 0, datalen, ®s); > return 0; > } > > Regards, > > Michael Brunnbauer > > On Mon, Sep 13, 2021 at 11:02:49AM +0200, Michael Brunnbauer wrote: > > > > Hello Simon, > > > > On Fri, Sep 10, 2021 at 01:22:50PM +0200, Simon Josefsson wrote: > > > Could you try to reproduce the problem standalone? The file regexp.m4 > > > contains the C code to trigger the bug, > > > > Not usable. But configure actually dumps the code in config.log - I > > extracted > > it from there. > > > > > could you extract it and build it separately and run it under gdb and get > > > a 'bt full' backtrace? > > > > Sourcecode is attached. It was compiled with "gcc -o test -g -O2 test.c". > > Here is the backtrace: > > > > gdb test > > GNU gdb (GDB) 9.1 > > Copyright (C) 2020 Free Software Foundation, Inc. > > License GPLv3+: GNU GPL version 3 or later > > <http://gnu.org/licenses/gpl.html> > > This is free software: you are free to change and redistribute it. > > There is NO WARRANTY, to the extent permitted by law. > > Type "show copying" and "show warranty" for details. > > This GDB was configured as "x86_64-pc-linux-gnu". > > Type "show configuration" for configuration details. > > For bug reporting instructions, please see: > > <http://www.gnu.org/software/gdb/bugs/>. > > Find the GDB manual and other documentation resources online at: > > <http://www.gnu.org/software/gdb/documentation/>. > > > > For help, type "help". > > Type "apropos word" to search for commands related to "word"... > > Reading symbols from test... > > (gdb) run > > Starting program: /home/bold/GNU/inetutils-2.2/test > > > > Program received signal SIGSEGV, Segmentation fault. > > memcpy@GLIBC_2.2.5 () > > at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:208 > > 208 VMOVU (%rsi), %VEC(0) > > (gdb) bt full > > #0 memcpy@GLIBC_2.2.5 () > > at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:208 > > No locals. > > #1 0x00007ffff7e9f1b6 in pop_fail_stack (fs=fs@entry=0x7fffffffe0a0, > > pidx=pidx@entry=0x7fffffffe08c, nregs=nregs@entry=2, > > regs=regs@entry=0x406da0, > > eps_via_nodes=eps_via_nodes@entry=0x7fffffffe090) > > at regexec.c:1351 > > num = <optimized out> > > #2 0x00007ffff7eaa271 in set_regs (fl_backtrack=<optimized out>, > > pmatch=0x406da0, nmatch=2, mctx=0x7fffffffe150, preg=0x406cb0) > > at regexec.c:1449 > > dfa = <optimized out> > > idx = 0 > > eps_via_nodes = {alloc = 2, nelem = 1, elems = 0x40b340} > > cur_node = <optimized out> > > fs = 0x7fffffffe0a0 > > fs_body = {num = -1, alloc = 4, stack = 0x40ba30} > > prev_match = {u = {dynarray_abstract = {used = 2, allocated = 16, > > array = 0x7fffffffe0c8}, dynarray_header = {used = 2, > > allocated = 16, array = 0x7fffffffe0c8}}, scratch = {{rm_so = > > 0, > > rm_eo = 1}, {rm_so = 0, rm_eo = 1}, {rm_so = 2, rm_eo = 0}, { > > rm_so = 16, rm_eo = 0}, {rm_so = 4236744, rm_eo = 0}, { > > rm_so = 4236720, rm_eo = 0}, {rm_so = 4222128, rm_eo = 0}, { > > rm_so = 50, rm_eo = 0}, {rm_so = -135964009, rm_eo = 32767}, { > > rm_so = 4222912, rm_eo = 0}, {rm_so = 4236744, rm_eo = 0}, { > > rm_so = 4236720, rm_eo = 0}, {rm_so = 2, rm_eo = 0}, { > > rm_so = 4222912, rm_eo = 0}, {rm_so = -135668317, > > rm_eo = 32767}, {rm_so = 0, rm_eo = 1}}} > > prev_idx_match = <optimized out> > > dfa = <optimized out> > > idx = <optimized out> > > cur_node = <optimized out> > > eps_via_nodes = <optimized out> > > fs = <optimized out> > > fs_body = <optimized out> > > prev_match = <optimized out> > > prev_idx_match = <optimized out> > > reg_idx = <optimized out> > > #3 re_search_internal (preg=preg@entry=0x4040a0 <regex>, > > string=string@entry=0x402080 <data> "a", length=length@entry=1, > > start=<optimized out>, start@entry=0, last_start=<optimized out>, > > last_start@entry=1, stop=stop@entry=1, nmatch=2, pmatch=0x406da0, > > eflags=0) > > at regexec.c:849 > > reg_idx = <optimized out> > > err = _REG_NOERROR > > dfa = 0x406cb0 > > left_lim = 0 > > right_lim = 1 > > incr = 1 > > fl_longest_match = <optimized out> > > match_kind = 8 > > match_first = 0 > > match_last = <optimized out> > > extra_nmatch = 0 > > sb = true > > ch = <optimized out> > > mctx = {input = {raw_mbs = 0x402080 <data> "a", > > mbs = 0x402080 <data> "a", wcs = 0x0, offsets = 0x0, cur_state > > = { > > __count = 0, __value = {__wch = 0, __wchb = "\000\000\000"}}, > > raw_mbs_idx = 0, valid_len = 1, valid_raw_len = 1, bufs_len = 2, > > cur_idx = 1, raw_len = 1, len = 1, raw_stop = 1, stop = 1, > > tip_context = 6, trans = 0x0, word_char = 0x406d58, > > icase = 0 '\000', is_utf8 = 0 '\000', map_notascii = 0 '\000', > > mbs_allocated = 0 '\000', offsets_needed = 0 '\000', > > newline_anchor = 1 '\001', word_ops_used = 0 '\000', > > mb_cur_max = 1}, dfa = 0x406cb0, eflags = 0, match_last = 1, > > last_node = 8, state_log = 0x40b300, state_log_top = 1, > > nbkref_ents = 3, abkref_ents = 4, bkref_ents = 0x40b130, > > max_mb_elem_len = 0, nsub_tops = 2, asub_tops = 2, > > sub_tops = 0x406400} > > fastmap = 0x0 > > t = <optimized out> > > #4 0x00007ffff7eab8a2 in re_search_stub (bufp=bufp@entry=0x4040a0 <regex>, > > string=string@entry=0x402080 <data> "a", length=length@entry=1, > > start=start@entry=0, range=range@entry=1, stop=stop@entry=1, > > regs=0x7fffffffe300, ret_len=false) at regexec.c:425 > > result = <optimized out> > > pmatch = 0x406da0 > > nregs = 2 > > rval = <optimized out> > > eflags = <optimized out> > > dfa = <optimized out> > > last_start = <optimized out> > > #5 0x00007ffff7eac1a0 in __re_search (bufp=bufp@entry=0x4040a0 <regex>, > > string=string@entry=0x402080 <data> "a", length=length@entry=1, > > start=start@entry=0, range=range@entry=1, > > regs=regs@entry=0x7fffffffe300) > > at regexec.c:289 > > No locals. > > #6 0x000000000040151b in main () at test1.c:650 > > data = "a" > > datalen = 1 > > result = 0 > > regex = {buffer = 0x406cb0, allocated = 224, used = 224, > > syntax = 16843462, fastmap = 0x0, translate = 0x0, re_nsub = 1, > > can_be_null = 0, regs_allocated = 0, fastmap_accurate = 0, > > no_sub = 0, not_bol = 0, not_eol = 0, newline_anchor = 1} > > folded_chars = > > "\000\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 > > > > !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237 > > ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇ"... > > i = <optimized out> > > s = <optimized out> > > regs = {num_regs = 0, start = 0x0, end = 0x0} > > pat_sub2 = "\\(a*\\)*a*\\1" > > > > Regards, > > > > Michael Brunnbauer > > > > -- > > ++ Michael Brunnbauer > > ++ netEstate GmbH > > ++ Geisenhausener Straße 11a > > ++ 81379 München > > ++ Tel +49 89 32 19 77 80 > > ++ Fax +49 89 32 19 77 89 > > ++ E-Mail bru...@netestate.de > > ++ https://www.netestate.de/ > > ++ > > ++ Sitz: München, HRB Nr.142452 (Handelsregister B München) > > ++ USt-IdNr. DE221033342 > > ++ Geschäftsführer: Michael Brunnbauer, Franz Brunnbauer > > ++ Prokurist: Dipl. Kfm. (Univ.) Markus Hendel > > > /* confdefs.h */ > > #define PACKAGE_NAME "GNU inetutils" > > #define PACKAGE_TARNAME "inetutils" > > #define PACKAGE_VERSION "2.2" > > #define PACKAGE_STRING "GNU inetutils 2.2" > > #define PACKAGE_BUGREPORT "bug-inetutils@gnu.org" > > #define PACKAGE_URL "http://www.gnu.org/software/inetutils/" > > #define PACKAGE "inetutils" > > #define VERSION "2.2" > > #define STDC_HEADERS 1 > > #define HAVE_SYS_TYPES_H 1 > > #define HAVE_SYS_STAT_H 1 > > #define HAVE_STDLIB_H 1 > > #define HAVE_STRING_H 1 > > #define HAVE_MEMORY_H 1 > > #define HAVE_STRINGS_H 1 > > #define HAVE_INTTYPES_H 1 > > #define HAVE_STDINT_H 1 > > #define HAVE_UNISTD_H 1 > > #define HAVE_WCHAR_H 1 > > #define HAVE_FEATURES_H 1 > > #define HAVE_ARPA_INET_H 1 > > #define HAVE_SYS_SOCKET_H 1 > > #define HAVE_UNISTD_H 1 > > #define HAVE_SYS_PARAM_H 1 > > #define HAVE_DIRENT_H 1 > > #define HAVE_FNMATCH_H 1 > > #define HAVE_PTY_H 1 > > #define HAVE_TERMIOS_H 1 > > #define HAVE_SYS_STAT_H 1 > > #define HAVE_SYS_VFS_H 1 > > #define HAVE_NETDB_H 1 > > #define HAVE_NETINET_IN_H 1 > > #define HAVE_GETOPT_H 1 > > #define HAVE_SYS_CDEFS_H 1 > > #define HAVE_STDIO_EXT_H 1 > > #define HAVE_GRP_H 1 > > #define HAVE_GLOB_H 1 > > #define HAVE_THREADS_H 1 > > #define HAVE_LIMITS_H 1 > > #define HAVE_INTTYPES_H 1 > > #define HAVE_SYS_TYPES_H 1 > > #define HAVE_STDINT_H 1 > > #define HAVE_LANGINFO_H 1 > > #define HAVE_SYS_MMAN_H 1 > > #define HAVE_POLL_H 1 > > #define HAVE_SYS_IOCTL_H 1 > > #define HAVE_UTMP_H 1 > > #define HAVE_UTMPX_H 1 > > #define HAVE_MALLOC_H 1 > > #define HAVE_SYS_SELECT_H 1 > > #define HAVE_SYS_TIME_H 1 > > #define HAVE_STRINGS_H 1 > > #define HAVE_SYS_RANDOM_H 1 > > #define HAVE_SYS_UIO_H 1 > > #define HAVE_SYSEXITS_H 1 > > #define HAVE_WCTYPE_H 1 > > #define HAVE_STDLIB_H 1 > > #define _ALL_SOURCE 1 > > #define _DARWIN_C_SOURCE 1 > > #define _GNU_SOURCE 1 > > #define _HPUX_ALT_XOPEN_SOCKET_API 1 > > #define _NETBSD_SOURCE 1 > > #define _OPENBSD_SOURCE 1 > > #define _POSIX_PTHREAD_SEMANTICS 1 > > #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 > > #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 > > #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 > > #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 > > #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 > > #define __STDC_WANT_LIB_EXT2__ 1 > > #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 > > #define _TANDEM_SOURCE 1 > > #define __EXTENSIONS__ 1 > > #define HAVE_FSEEKO 1 > > #define HAVE_ALLOCA_H 1 > > #define HAVE_ALLOCA 1 > > #define restrict __restrict__ > > #define HAVE_DECL_CLEARERR_UNLOCKED 1 > > #define HAVE_DECL_FEOF_UNLOCKED 1 > > #define HAVE_DECL_FERROR_UNLOCKED 1 > > #define HAVE_DECL_FFLUSH_UNLOCKED 1 > > #define HAVE_DECL_FGETS_UNLOCKED 1 > > #define HAVE_DECL_FPUTC_UNLOCKED 1 > > #define HAVE_DECL_FPUTS_UNLOCKED 1 > > #define HAVE_DECL_FREAD_UNLOCKED 1 > > #define HAVE_DECL_FWRITE_UNLOCKED 1 > > #define HAVE_DECL_GETC_UNLOCKED 1 > > #define HAVE_DECL_GETCHAR_UNLOCKED 1 > > #define HAVE_DECL_PUTC_UNLOCKED 1 > > #define HAVE_DECL_PUTCHAR_UNLOCKED 1 > > #define HAVE_FLOCKFILE 1 > > #define HAVE_FUNLOCKFILE 1 > > #define HAVE_BTOWC 1 > > #define HAVE_FCHDIR 1 > > #define HAVE_EXPLICIT_BZERO 1 > > #define HAVE_FCNTL 1 > > #define HAVE_SYMLINK 1 > > #define HAVE_FDOPENDIR 1 > > #define HAVE_MEMPCPY 1 > > #define HAVE_FNMATCH 1 > > #define HAVE_MBSRTOWCS 1 > > #define HAVE_FSTATAT 1 > > #define HAVE_OPENAT 1 > > #define HAVE_FSTATFS 1 > > #define HAVE_GETDELIM 1 > > #define HAVE_GETDTABLESIZE 1 > > #define HAVE_GETLOGIN_R 1 > > #define HAVE_GETPASS 1 > > #define HAVE___FSETLOCKING 1 > > #define HAVE_GETRANDOM 1 > > #define HAVE_GETUSERSHELL 1 > > #define HAVE_GLOB 1 > > #define HAVE_GLOB_PATTERN_P 1 > > #define HAVE_GETPWNAM_R 1 > > #define HAVE_ISBLANK 1 > > #define HAVE_LSTAT 1 > > #define HAVE_MBSINIT 1 > > #define HAVE_MBRTOWC 1 > > #define HAVE_MPROTECT 1 > > #define HAVE_GETGROUPLIST 1 > > #define HAVE_MKSTEMP 1 > > #define HAVE_NL_LANGINFO 1 > > #define HAVE_PIPE 1 > > #define HAVE_POSIX_OPENPT 1 > > #define HAVE_UTMPNAME 1 > > #define HAVE_UTMPXNAME 1 > > #define HAVE_ISWCTYPE 1 > > #define HAVE_SETENV 1 > > #define HAVE_SLEEP 1 > > #define HAVE_SNPRINTF 1 > > #define HAVE_STRNDUP 1 > > #define HAVE_WCRTOMB 1 > > #define HAVE_ISWCNTRL 1 > > #define HAVE_WMEMPCPY 1 > > #define HAVE_DECL_STRERROR_R 1 > > #define HAVE_STRERROR_R 1 > > #define STRERROR_R_CHAR_P 1 > > #define HAVE_LANGINFO_CODESET 1 > > #define HAVE_MALLOC_POSIX 1 > > #define HAVE_ENVIRON_DECL 1 > > #define HAVE_DECL_FCHDIR 1 > > #define HAVE_WORKING_O_NOATIME 1 > > #define HAVE_WORKING_O_NOFOLLOW 1 > > #define PROMOTED_MODE_T mode_t > > #define HAVE_DECL_STRMODE 0 > > #define HAVE_MBSTATE_T 1 > > #define _USE_STD_STAT 1 > > #define HAVE_DECL_FSEEKO 1 > > #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 > > #define HAVE_DECL_FTELLO 1 > > #define HAVE_SHUTDOWN 1 > > #define HAVE_STRUCT_SOCKADDR_STORAGE 1 > > #define HAVE_SA_FAMILY_T 1 > > #define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 > > #define HAVE_GETHOSTBYNAME 1 > > #define HAVE_GETSERVBYNAME 1 > > #define HAVE_DECL_INET_NTOP 1 > > #define HAVE_IPV4 1 > > #define HAVE_IPV6 1 > > #define HAVE_DECL_GETCWD 1 > > #define HAVE_DECL_GETDELIM 1 > > #define HAVE_DECL_GETDTABLESIZE 1 > > #define GETGROUPS_T gid_t > > #define HAVE_DECL_GETLINE 1 > > #define HAVE_DECL_GETLOGIN_R 1 > > #define HAVE_DECL_GETLOGIN 1 > > #define HAVE_GETOPT_H 1 > > #define HAVE_GETOPT_LONG_ONLY 1 > > #define HAVE_DECL_FLOCKFILE 1 > > #define HAVE_DECL_FUNLOCKFILE 1 > > #define HAVE_PTHREAD_API 1 > > #define SETLOCALE_NULL_ALL_MTSAFE 1 > > #define SETLOCALE_NULL_ONE_MTSAFE 1 > > #define HAVE_WINT_T 1 > > #define HAVE_LONG_LONG_INT 1 > > #define HAVE_UNSIGNED_LONG_LONG_INT 1 > > #define HAVE_WCHAR_T 1 > > #define HAVE_WEAK_SYMBOLS 1 > > #define USE_POSIX_THREADS 1 > > #define USE_POSIX_THREADS_FROM_LIBC 1 > > #define MALLOC_0_IS_NONNULL 1 > > #define HAVE_MAP_ANONYMOUS 1 > > #define HAVE_DECL_MEMRCHR 1 > > #define HAVE_MINMAX_IN_SYS_PARAM_H 1 > > #define HAVE_DECL_ALARM 1 > > #define HAVE_DECL_SETENV 1 > > #define HAVE_SEARCH_H 1 > > #define HAVE_TSEARCH 1 > > #define HAVE_SIGSET_T 1 > > #define HAVE_DECL_SNPRINTF 1 > > #define HAVE__BOOL 1 > > #define HAVE_DECL_FCLOSEALL 1 > > #define __USE_MINGW_ANSI_STDIO 1 > > #define HAVE_DECL_ECVT 1 > > #define HAVE_DECL_FCVT 1 > > #define HAVE_DECL_GCVT 1 > > #define HAVE_DECL_STRDUP 1 > > #define HAVE_DECL_STRNDUP 1 > > #define HAVE_DECL_STRNLEN 1 > > #define HAVE_DECL_EXECVPE 1 > > #define HAVE_INTTYPES_H_WITH_UINTMAX 1 > > #define HAVE_STDINT_H_WITH_UINTMAX 1 > > #define HAVE_INTMAX_T 1 > > #define DBL_EXPBIT0_WORD 1 > > #define DBL_EXPBIT0_BIT 20 > > #define HAVE_SNPRINTF 1 > > #define HAVE_STRNLEN 1 > > #define HAVE_WCSLEN 1 > > #define HAVE_WCSNLEN 1 > > #define HAVE_MBRTOWC 1 > > #define HAVE_WCRTOMB 1 > > #define HAVE_DECL__SNPRINTF 0 > > #define HAVE_SNPRINTF_RETVAL_C99 1 > > #define HAVE_SNPRINTF_TRUNCATION_C99 1 > > #define HAVE_DECL_VSNPRINTF 1 > > #define HAVE_DECL_WCSDUP 1 > > #define HAVE_TOWLOWER 1 > > #define HAVE_ALLOCA 1 > > #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 > > #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 > > #define HAVE_PROGRAM_INVOCATION_NAME 1 > > #define HAVE_PROGRAM_INVOCATION_SHORT_NAME 1 > > #define GNULIB_TEST_BTOWC 1 > > #define HAVE___BUILTIN_EXPECT 1 > > #define GNULIB_TEST_CALLOC_POSIX 1 > > #define GNULIB_TEST_CHDIR 1 > > #define HAVE_CLOCK_GETTIME 1 > > #define HAVE_CLOCK_SETTIME 1 > > #define GNULIB_TEST_CLOEXEC 1 > > #define GNULIB_TEST_CLOSE 1 > > #define HAVE_CLOSEDIR 1 > > #define GNULIB_TEST_CLOSEDIR 1 > > #define D_INO_IN_DIRENT 1 > > #define HAVE_STRUCT_DIRENT_D_TYPE 1 > > #define HAVE_DIRFD 1 > > #define HAVE_DECL_DIRFD 1 > > #define GNULIB_TEST_DIRFD 1 > > #define GNULIB_TEST_DUP 1 > > #define GNULIB_TEST_DUP2 1 > > #define GNULIB_TEST_ENVIRON 1 > > #define GNULIB_TEST_EXPLICIT_BZERO 1 > > #define GNULIB_TEST_FCHDIR 1 > > #define GNULIB_TEST_FCNTL 1 > > #define GNULIB_FCNTL_SAFER 1 > > #define GNULIB_FD_SAFER_FLAG 1 > > #define HAVE_DECL_FDOPENDIR 1 > > #define GNULIB_TEST_FDOPENDIR 1 > > #define GNULIB_FDOPENDIR 1 > > #define FLEXIBLE_ARRAY_MEMBER /**/ > > #define GNULIB_TEST_FNMATCH 1 > > #define GNULIB_TEST_FOPEN 1 > > #define GNULIB_FOPEN_GNU 1 > > #define GNULIB_FOPEN_SAFER 1 > > #define HAVE_DECL_FORKPTY 1 > > #define HAVE_FORKPTY 1 > > #define GNULIB_TEST_FORKPTY 1 > > #define HAVE_FREE_POSIX 1 > > #define GNULIB_TEST_FREE_POSIX 1 > > #define GNULIB_TEST_FSEEK 1 > > #define GNULIB_TEST_FSEEKO 1 > > #define GNULIB_TEST_FSTAT 1 > > #define GNULIB_TEST_FSTATAT 1 > > #define GNULIB_TEST_FTELL 1 > > #define GNULIB_TEST_FTELLO 1 > > #define HAVE_STRUCT_STATFS_F_TYPE 1 > > #define HAVE___FSWORD_T 1 > > #define fts_open rpl_fts_open > > #define fts_close rpl_fts_close > > #define fts_read rpl_fts_read > > #define fts_set rpl_fts_set > > #define fts_children rpl_fts_children > > #define fts_cross_check rpl_fts_cross_check > > #define HAVE_GETADDRINFO 1 > > #define HAVE_DECL_GAI_STRERROR 1 > > #define HAVE_DECL_GAI_STRERRORA 0 > > #define HAVE_DECL_GETADDRINFO 1 > > #define HAVE_DECL_FREEADDRINFO 1 > > #define HAVE_DECL_GETNAMEINFO 1 > > #define HAVE_STRUCT_ADDRINFO 1 > > #define GNULIB_TEST_GETADDRINFO 1 > > #define HAVE_GETPAGESIZE 1 > > #define HAVE_MINIMALLY_WORKING_GETCWD 1 > > #define GNULIB_GETCWD 1 > > #define GNULIB_TEST_GETCWD 1 > > #define GNULIB_TEST_GETCWD 1 > > #define GNULIB_TEST_GETDELIM 1 > > #define HAVE_GETDOMAINNAME 1 > > #define HAVE_DECL_GETDOMAINNAME 1 > > #define GNULIB_TEST_GETDOMAINNAME 1 > > #define GNULIB_TEST_GETDTABLESIZE 1 > > #define HAVE_GETGROUPS 1 > > #define GNULIB_TEST_GETGROUPS 1 > > #define HAVE_GETHOSTNAME 1 > > #define GNULIB_TEST_GETHOSTNAME 1 > > #define GNULIB_TEST_GETLINE 1 > > #define GNULIB_TEST_GETLOGIN_R 1 > > #define __GETOPT_PREFIX rpl_ > > #define GNULIB_TEST_GETOPT_POSIX 1 > > #define GNULIB_TEST_GETPASS 1 > > #define GNULIB_TEST_GETPEERNAME 1 > > #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 > > #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 > > #define HAVE_DECL___ARGV 0 > > #define GNULIB_TEST_GETRANDOM 1 > > #define HAVE_DECL_GETUSERSHELL 1 > > #define GNULIB_TEST_GETUSERSHELL 1 > > #define GNULIB_TEST_GLOB 1 > > #define HAVE_GETHOSTBYNAME 1 > > #define HAVE_DECL_INET_NTOP 1 > > #define HAVE_IOCTL 1 > > #define GNULIB_TEST_IOCTL 1 > > #define GNULIB_ISBLANK 1 > > #define HAVE___INLINE 1 > > #define GNULIB_TEST_LOCALECONV 1 > > #define HAVE_PTHREAD_RWLOCK 1 > > #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 > > #define GNULIB_LOCK 1 > > #define HAVE_LOGIN_TTY 1 > > #define GNULIB_TEST_LOGIN_TTY 1 > > #define GNULIB_TEST_LSEEK 1 > > #define GNULIB_TEST_LSTAT 1 > > #define GNULIB_TEST_MALLOC_POSIX 1 > > #define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1 > > #define GNULIB_TEST_MBRTOWC 1 > > #define GNULIB_TEST_MBSINIT 1 > > #define GNULIB_TEST_MBSRTOWCS 1 > > #define HAVE_MBTOWC 1 > > #define GNULIB_TEST_MBTOWC 1 > > #define GNULIB_TEST_MEMCHR 1 > > #define HAVE_MEMPCPY 1 > > #define GNULIB_TEST_MEMPCPY 1 > > #define HAVE_MEMRCHR 1 > > #define GNULIB_TEST_MEMRCHR 1 > > #define GNULIB_TEST_MKDIR 1 > > #define GNULIB_TEST_MKSTEMP 1 > > #define GNULIB_MSVC_NOTHROW 1 > > #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 > > #define NL_LANGINFO_MTSAFE 1 > > #define GNULIB_TEST_NL_LANGINFO 1 > > #define GNULIB_TEST_OPEN 1 > > #define GNULIB_OPENAT 1 > > #define GNULIB_TEST_OPENAT 1 > > #define GNULIB_OPENAT_SAFER 1 > > #define HAVE_OPENDIR 1 > > #define GNULIB_TEST_OPENDIR 1 > > #define HAVE_DECL_OPENPTY 1 > > #define HAVE_OPENPTY 1 > > #define GNULIB_TEST_OPENPTY 1 > > #define GNULIB_TEST_PIPE 1 > > #define HAVE_POLL 1 > > #define GNULIB_TEST_POLL 1 > > #define GNULIB_TEST_POSIX_OPENPT 1 > > #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 > > #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 > > #define HAVE_RAWMEMCHR 1 > > #define GNULIB_TEST_RAWMEMCHR 1 > > #define HAVE_READDIR 1 > > #define GNULIB_TEST_READDIR 1 > > #define HAVE_READLINE 1 > > #define HAVE_READLINE_READLINE_H 1 > > #define HAVE_READLINE_HISTORY_H 1 > > #define HAVE_DECL_GETUTENT 1 > > #define HAVE_STRUCT_UTMPX_UT_USER 1 > > #define HAVE_STRUCT_UTMP_UT_USER 1 > > #define HAVE_STRUCT_UTMPX_UT_NAME 1 > > #define HAVE_STRUCT_UTMP_UT_NAME 1 > > #define HAVE_STRUCT_UTMPX_UT_TYPE 1 > > #define HAVE_STRUCT_UTMP_UT_TYPE 1 > > #define HAVE_STRUCT_UTMPX_UT_PID 1 > > #define HAVE_STRUCT_UTMP_UT_PID 1 > > #define HAVE_STRUCT_UTMPX_UT_ID 1 > > #define HAVE_STRUCT_UTMP_UT_ID 1 > > #define HAVE_STRUCT_UTMPX_UT_EXIT 1 > > #define HAVE_STRUCT_UTMP_UT_EXIT 1 > > #define HAVE_STRUCT_UTMPX_UT_EXIT_E_EXIT 1 > > #define HAVE_STRUCT_UTMP_UT_EXIT_E_EXIT 1 > > #define HAVE_STRUCT_UTMPX_UT_EXIT_E_TERMINATION 1 > > #define HAVE_STRUCT_UTMP_UT_EXIT_E_TERMINATION 1 > > #define GNULIB_TEST_REALLOC_POSIX 1 > > #define HAVE_REALLOCARRAY 1 > > #define GNULIB_REALLOCARRAY 1 > > #define GNULIB_TEST_REALLOCARRAY 1 > > /* end confdefs.h. */ > > #include <regex.h> > > > > #include <locale.h> > > #include <limits.h> > > #include <string.h> > > > > #if defined M_CHECK_ACTION || HAVE_DECL_ALARM > > # include <signal.h> > > # include <unistd.h> > > #endif > > > > #if HAVE_MALLOC_H > > # include <malloc.h> > > #endif > > > > #ifdef M_CHECK_ACTION > > /* Exit with distinguishable exit code. */ > > static void sigabrt_no_core (int sig) { raise (SIGTERM); } > > #endif > > > > int > > main () > > { > > int result = 0; > > static struct re_pattern_buffer regex; > > unsigned char folded_chars[UCHAR_MAX + 1]; > > int i; > > const char *s; > > struct re_registers regs; > > > > /* Some builds of glibc go into an infinite loop on this > > test. Use alarm to force death, and mallopt to avoid > > malloc recursion in diagnosing the corrupted heap. */ > > #if HAVE_DECL_ALARM > > signal (SIGALRM, SIG_DFL); > > alarm (2); > > #endif > > #ifdef M_CHECK_ACTION > > signal (SIGABRT, sigabrt_no_core); > > mallopt (M_CHECK_ACTION, 2); > > #endif > > > > if (setlocale (LC_ALL, "en_US.UTF-8")) > > { > > { > > /* > > https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html > > This test needs valgrind to catch the bug on Debian > > GNU/Linux 3.1 x86, but it might catch the bug better > > on other platforms and it shouldn't hurt to try the > > test here. */ > > static char const pat[] = "insert into"; > > static char const data[] = > > "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; > > re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE > > | RE_ICASE); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern (pat, sizeof pat - 1, ®ex); > > if (s) > > result |= 1; > > else > > { > > if (re_search (®ex, data, sizeof data - 1, > > 0, sizeof data - 1, ®s) > > != -1) > > result |= 1; > > regfree (®ex); > > } > > } > > > > { > > /* This test is from glibc bug 15078. > > The test case is from Andreas Schwab in > > > > <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. > > */ > > static char const pat[] = "[^x]x"; > > static char const data[] = > > /* > > <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ > > "\xe1\x80\x80" > > "\xe1\x80\xbb" > > "\xe1\x80\xbd" > > "\xe1\x80\x94" > > "\xe1\x80\xba" > > "\xe1\x80\xaf" > > "\xe1\x80\x95" > > "\xe1\x80\xba" > > "x"; > > re_set_syntax (0); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern (pat, sizeof pat - 1, ®ex); > > if (s) > > result |= 1; > > else > > { > > i = re_search (®ex, data, sizeof data - 1, > > 0, sizeof data - 1, 0); > > if (i != 0 && i != 21) > > result |= 1; > > regfree (®ex); > > } > > } > > > > if (! setlocale (LC_ALL, "C")) > > return 1; > > } > > > > /* This test is from glibc bug 3957, reported by Andrew Mackey. > > */ > > re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("a[^x]b", 6, ®ex); > > if (s) > > result |= 2; > > else > > { > > /* This should fail, but succeeds for glibc-2.5. */ > > if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) > > result |= 2; > > regfree (®ex); > > } > > > > /* This regular expression is from Spencer ere test number 75 > > in grep-2.3. */ > > re_set_syntax (RE_SYNTAX_POSIX_EGREP); > > memset (®ex, 0, sizeof regex); > > for (i = 0; i <= UCHAR_MAX; i++) > > folded_chars[i] = i; > > regex.translate = folded_chars; > > s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); > > /* This should fail with _Invalid character class name_ error. > > */ > > if (!s) > > { > > result |= 4; > > regfree (®ex); > > } > > > > /* Ensure that [b-a] is diagnosed as invalid, when > > using RE_NO_EMPTY_RANGES. */ > > re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("a[b-a]", 6, ®ex); > > if (s == 0) > > { > > result |= 8; > > regfree (®ex); > > } > > > > /* This should succeed, but does not for glibc-2.1.3. */ > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("{1", 2, ®ex); > > if (s) > > result |= 8; > > else > > regfree (®ex); > > > > /* The following example is derived from a problem report > > against gawk from Jorge Stolfi <sto...@ic.unicamp.br>. */ > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("[an\371]*n", 7, ®ex); > > if (s) > > result |= 8; > > else > > { > > /* This should match, but does not for glibc-2.2.1. */ > > if (re_match (®ex, "an", 2, 0, ®s) != 2) > > result |= 8; > > else > > { > > free (regs.start); > > free (regs.end); > > } > > regfree (®ex); > > } > > > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("x", 1, ®ex); > > if (s) > > result |= 8; > > else > > { > > /* glibc-2.2.93 does not work with a negative RANGE > > argument. */ > > if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) > > result |= 8; > > else > > { > > free (regs.start); > > free (regs.end); > > } > > regfree (®ex); > > } > > > > /* The version of regex.c in older versions of gnulib > > ignored RE_ICASE. Detect that problem too. */ > > re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("x", 1, ®ex); > > if (s) > > result |= 16; > > else > > { > > if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) > > result |= 16; > > else > > { > > free (regs.start); > > free (regs.end); > > } > > regfree (®ex); > > } > > > > /* Catch a bug reported by Vin Shelton in > > https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html > > */ > > re_set_syntax (RE_SYNTAX_POSIX_BASIC > > & ~RE_CONTEXT_INVALID_DUP > > & ~RE_NO_EMPTY_RANGES); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("[[:alnum:]_-]\\+$", 16, ®ex); > > if (s) > > result |= 32; > > else > > regfree (®ex); > > > > /* REG_STARTEND was added to glibc on 2004-01-15. > > Reject older versions. */ > > if (! REG_STARTEND) > > result |= 64; > > > > /* Matching with the compiled form of this regexp would provoke > > an assertion failure prior to glibc-2.28: > > regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed > > With glibc-2.28, compilation fails and reports the invalid > > back reference. */ > > re_set_syntax (RE_SYNTAX_POSIX_EGREP); > > memset (®ex, 0, sizeof regex); > > s = re_compile_pattern ("0|()0|\\1|0", 10, ®ex); > > if (!s) > > { > > memset (®s, 0, sizeof regs); > > i = re_search (®ex, "x", 1, 0, 1, ®s); > > if (i != -1) > > result |= 64; > > if (0 <= i) > > { > > free (regs.start); > > free (regs.end); > > } > > regfree (®ex); > > } > > else > > { > > if (strcmp (s, "Invalid back reference")) > > result |= 64; > > } > > > > /* glibc bug 11053. */ > > re_set_syntax (RE_SYNTAX_POSIX_BASIC); > > memset (®ex, 0, sizeof regex); > > static char const pat_sub2[] = "\\(a*\\)*a*\\1"; > > s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); > > if (s) > > result |= 64; > > else > > { > > memset (®s, 0, sizeof regs); > > static char const data[] = "a"; > > int datalen = sizeof data - 1; > > i = re_search (®ex, data, datalen, 0, datalen, ®s); > > if (i != 0) > > result |= 64; > > else if (regs.num_regs < 2) > > result |= 64; > > else if (! (regs.start[0] == 0 && regs.end[0] == 1)) > > result |= 64; > > else if (! (regs.start[1] == 0 && regs.end[1] == 0)) > > result |= 64; > > regfree (®ex); > > free (regs.start); > > free (regs.end); > > } > > > > #if 0 > > /* It would be nice to reject hosts whose regoff_t values are > > too > > narrow (including glibc on hosts with 64-bit ptrdiff_t and > > 32-bit int), but we should wait until glibc implements this > > feature. Otherwise, support for equivalence classes and > > multibyte collation symbols would always be broken except > > when compiling --without-included-regex. */ > > if (sizeof (regoff_t) < sizeof (ptrdiff_t) > > || sizeof (regoff_t) < sizeof (ssize_t)) > > result |= 64; > > #endif > > > > return result; > > > > ; > > return 0; > > } > > > > > -- > ++ Michael Brunnbauer > ++ netEstate GmbH > ++ Geisenhausener Straße 11a > ++ 81379 München > ++ Tel +49 89 32 19 77 80 > ++ Fax +49 89 32 19 77 89 > ++ E-Mail bru...@netestate.de > ++ https://www.netestate.de/ > ++ > ++ Sitz: München, HRB Nr.142452 (Handelsregister B München) > ++ USt-IdNr. DE221033342 > ++ Geschäftsführer: Michael Brunnbauer, Franz Brunnbauer > ++ Prokurist: Dipl. Kfm. (Univ.) Markus Hendel -- ++ Michael Brunnbauer ++ netEstate GmbH ++ Geisenhausener Straße 11a ++ 81379 München ++ Tel +49 89 32 19 77 80 ++ Fax +49 89 32 19 77 89 ++ E-Mail bru...@netestate.de ++ https://www.netestate.de/ ++ ++ Sitz: München, HRB Nr.142452 (Handelsregister B München) ++ USt-IdNr. DE221033342 ++ Geschäftsführer: Michael Brunnbauer, Franz Brunnbauer ++ Prokurist: Dipl. Kfm. (Univ.) Markus Hendel
signature.asc
Description: PGP signature