summaryrefslogtreecommitdiff
path: root/m4/regex.m4
diff options
context:
space:
mode:
authorDaniel Llorens <lloda@sarc.name>2021-08-16 13:23:27 +0200
committerDaniel Llorens <lloda@sarc.name>2021-08-16 13:23:27 +0200
commitb4a80f4239b19fea4d2cc3e9d197f24b809f0624 (patch)
treeb4dc728ec96391e302df4f7c733bf592a3976ff2 /m4/regex.m4
parent5df5555d12f1408a66a5368a918abb981edf5445 (diff)
downloadguile-b4a80f4239b19fea4d2cc3e9d197f24b809f0624.tar.gz
Update gnulib to 8f4538a53d64054ae2fc8b86c0f87c418c6176e6
Includes gnulib:0c907f7da13232908f05c415b8cec56024071906 to fix #49930 https://lists.gnu.org/archive/html/bug-guile/2021-08/msg00003.html.
Diffstat (limited to 'm4/regex.m4')
-rw-r--r--m4/regex.m444
1 files changed, 40 insertions, 4 deletions
diff --git a/m4/regex.m4 b/m4/regex.m4
index 850c57222..1c7e562f6 100644
--- a/m4/regex.m4
+++ b/m4/regex.m4
@@ -1,4 +1,4 @@
-# serial 71
+# serial 73
# Copyright (C) 1996-2001, 2003-2021 Free Software Foundation, Inc.
#
@@ -246,7 +246,7 @@ AC_DEFUN([gl_REGEX],
& ~RE_CONTEXT_INVALID_DUP
& ~RE_NO_EMPTY_RANGES);
memset (&regex, 0, sizeof regex);
- s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, &regex);
+ s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, &regex);
if (s)
result |= 32;
else
@@ -264,14 +264,50 @@ AC_DEFUN([gl_REGEX],
back reference. */
re_set_syntax (RE_SYNTAX_POSIX_EGREP);
memset (&regex, 0, sizeof regex);
- s = re_compile_pattern ("0|()0|\\1|0", 10, &regex);
+ s = re_compile_pattern ("0|()0|\\\\1|0", 10, &regex);
if (!s)
- result |= 64;
+ {
+ memset (&regs, 0, sizeof regs);
+ i = re_search (&regex, "x", 1, 0, 1, &regs);
+ if (i != -1)
+ result |= 64;
+ if (0 <= i)
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
else
{
if (strcmp (s, "Invalid back reference"))
result |= 64;
+ }
+
+ /* glibc bug 11053. */
+ re_set_syntax (RE_SYNTAX_POSIX_BASIC);
+ memset (&regex, 0, sizeof regex);
+ static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1";
+ s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, &regex);
+ if (s)
+ result |= 64;
+ else
+ {
+ memset (&regs, 0, sizeof regs);
+ static char const data[] = "a";
+ int datalen = sizeof data - 1;
+ i = re_search (&regex, data, datalen, 0, datalen, &regs);
+ 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 (&regex);
+ free (regs.start);
+ free (regs.end);
}
#if 0