Re: [PATCH 8/8] regex: fix glibc bug 20381

Paul Eggert <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Organization UCLA Computer Science Department
Message-ID <[email protected]>
On 2026-05-21 22:56, Bruno Haible wrote:

> ../../gltests/test-regex-en.c:125:1: warning: unused function 'bug_regex11'

Thanks for reporting that. Yes, it's an unnecessary duplicate of tests 
already done elsewhere. Fixed with the attached.
0001-regex-tests-omit-unused-parts.patch (text/x-patch, 7.1 KB)
From 5ab7a04761dac69403f677de4ee44c1940777b46 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
Date: Fri, 22 May 2026 08:44:12 -0700
Subject: [PATCH] regex-tests: omit unused parts

Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2026-05/msg00137.html
* tests/test-regex-en.c (tests, bug_regex11): Remove; unused.
* tests/test-regex-en.c, tests/test-regex-tr.c, tests/test-regex.c:
(main): Omit unused args.
---
 ChangeLog             |   9 ++++
 tests/test-regex-en.c | 109 +-----------------------------------------
 tests/test-regex-tr.c |   2 +-
 tests/test-regex.c    |   2 +-
 4 files changed, 12 insertions(+), 110 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f3cd5f3b0e..8892a3d09b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2026-05-22  Paul Eggert  <[email protected]>
+
+	regex-tests: omit unused parts
+	Problem reported by Bruno Haible in:
+	https://lists.gnu.org/r/bug-gnulib/2026-05/msg00137.html
+	* tests/test-regex-en.c (tests, bug_regex11): Remove; unused.
+	* tests/test-regex-en.c, tests/test-regex-tr.c, tests/test-regex.c:
+	(main): Omit unused args.
+
 2026-05-22  Bruno Haible  <[email protected]>
 
 	doc: Update for OpenBSD 7.9.
diff --git a/tests/test-regex-en.c b/tests/test-regex-en.c
index 7317961bc5..c8d2304642 100644
--- a/tests/test-regex-en.c
+++ b/tests/test-regex-en.c
@@ -54,115 +54,8 @@ really_utf8 (void)
   return streq (locale_charset (), "UTF-8");
 }
 
-/* Tests supposed to match; copied from glibc posix/bug-regex11.c.  */
-static struct
-{
-  const char *pattern;
-  const char *string;
-  int flags, nmatch;
-  regmatch_t rm[5];
-} const tests[] = {
-  /* Test for newline handling in regex.  */
-  { "[^~]*~", "\nx~y", 0, 2, { { 0, 3 }, { -1, -1 } } },
-  /* Other tests.  */
-  { "a(.*)b", "a b", REG_EXTENDED, 2, { { 0, 3 }, { 1, 2 } } },
-  { ".*|\\([KIO]\\)\\([^|]*\\).*|?[KIO]", "10~.~|P|K0|I10|O16|?KSb", 0, 3,
-    { { 0, 21 }, { 15, 16 }, { 16, 18 } } },
-  { ".*|\\([KIO]\\)\\([^|]*\\).*|?\\1", "10~.~|P|K0|I10|O16|?KSb", 0, 3,
-    { { 0, 21 }, { 8, 9 }, { 9, 10 } } },
-  { "^\\(a*\\)\\1\\{9\\}\\(a\\{0,9\\}\\)\\([0-9]*;.*[^a]\\2\\([0-9]\\)\\)",
-    "a1;;0a1aa2aaa3aaaa4aaaaa5aaaaaa6aaaaaaa7aaaaaaaa8aaaaaaaaa9aa2aa1a0", 0,
-    5, { { 0, 67 }, { 0, 0 }, { 0, 1 }, { 1, 67 }, { 66, 67 } } },
-  /* Test for BRE expression anchoring.  POSIX says just that this may match;
-     in glibc regex it always matched, so avoid changing it.  */
-  { "\\(^\\|foo\\)bar", "bar", 0, 2, { { 0, 3 }, { -1, -1 } } },
-  { "\\(foo\\|^\\)bar", "bar", 0, 2, { { 0, 3 }, { -1, -1 } } },
-  /* In ERE this must be treated as an anchor.  */
-  { "(^|foo)bar", "bar", REG_EXTENDED, 2, { { 0, 3 }, { -1, -1 } } },
-  { "(foo|^)bar", "bar", REG_EXTENDED, 2, { { 0, 3 }, { -1, -1 } } },
-  /* Here ^ cannot be treated as an anchor according to POSIX.  */
-  { "(^|foo)bar", "(^|foo)bar", 0, 2, { { 0, 10 }, { -1, -1 } } },
-  { "(foo|^)bar", "(foo|^)bar", 0, 2, { { 0, 10 }, { -1, -1 } } },
-  /* More tests on backreferences.  */
-  { "()\\1", "x", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } },
-  { "()x\\1", "x", REG_EXTENDED, 2, { { 0, 1 }, { 0, 0 } } },
-  { "()\\1*\\1*", "", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } },
-  { "([0-9]).*\\1(a*)", "7;7a6", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } },
-  { "([0-9]).*\\1(a*)", "7;7a", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } },
-  { "(b)()c\\1", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 1 }, { 1, 1 } } },
-  { "()(b)c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } },
-  { "a(b)()c\\1", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 2 }, { 2, 2 } } },
-  { "a()(b)c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } },
-  { "()(b)\\1c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } },
-  { "(b())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 1 } } },
-  { "a()(b)\\1c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } },
-  { "a()d(b)\\1c\\2", "adbcb", REG_EXTENDED, 3, { { 0, 5 }, { 1, 1 }, { 2, 3 } } },
-  { "a(b())\\2\\1", "abbbb", REG_EXTENDED, 3, { { 0, 3 }, { 1, 2 }, { 2, 2 } } },
-  { "(bb())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 4 }, { 0, 2 }, { 2, 2 } } },
-  { "^([^,]*),\\1,\\1$", "a,a,a", REG_EXTENDED, 2, { { 0, 5 }, { 0, 1 } } },
-  { "^([^,]*),\\1,\\1$", "ab,ab,ab", REG_EXTENDED, 2, { { 0, 8 }, { 0, 2 } } },
-  { "^([^,]*),\\1,\\1,\\1$", "abc,abc,abc,abc", REG_EXTENDED, 2,
-    { { 0, 15 }, { 0, 3 } } },
-  { "^(.?)(.?)(.?)(.?)(.?).?\\5\\4\\3\\2\\1$",
-    "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } },
-  { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$",
-    "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } },
-  { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$",
-    "abcdedcba", REG_EXTENDED, 1, { { 0, 9 } } },
-  { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$",
-    "ababababa", REG_EXTENDED, 1, { { 0, 9 } } },
-  { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$",
-    "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } },
-  { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$",
-    "ababababa", REG_EXTENDED, 1, { { 0, 9 } } },
-  /* Test for *+ match.  */
-  { "^a*+(.)", "ab", REG_EXTENDED, 2, { { 0, 2 }, { 1, 2 } } },
-  /* Test for ** match.  */
-  { "^(a*)*(.)", "ab", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 2 } } },
-};
-
-static void
-bug_regex11 (void)
-{
-  regex_t re;
-  regmatch_t rm[5];
-
-  for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
-    {
-      int err = regcomp (&re, tests[i].pattern, tests[i].flags);
-      if (err != 0)
-        {
-          char buf[500];
-          regerror (err, &re, buf, sizeof (buf));
-          report_error ("%s: regcomp %zd failed: %s", tests[i].pattern, i, buf);
-          continue;
-        }
-
-      if (regexec (&re, tests[i].string, tests[i].nmatch, rm, 0))
-        {
-          report_error ("%s: regexec %zd failed", tests[i].pattern, i);
-          regfree (&re);
-          continue;
-        }
-
-      for (int n = 0; n < tests[i].nmatch; ++n)
-        if (rm[n].rm_so != tests[i].rm[n].rm_so
-              || rm[n].rm_eo != tests[i].rm[n].rm_eo)
-          {
-            if (tests[i].rm[n].rm_so == -1 && tests[i].rm[n].rm_eo == -1)
-              break;
-            report_error ("%s: regexec %zd match failure rm[%d] %d..%d",
-                          tests[i].pattern, i, n,
-                          (int) rm[n].rm_so, (int) rm[n].rm_eo);
-            break;
-          }
-
-      regfree (&re);
-    }
-}
-
 int
-main (int argc, char *argv[])
+main ()
 {
   struct re_pattern_buffer regex;
   const char *s;
diff --git a/tests/test-regex-tr.c b/tests/test-regex-tr.c
index 3c234c26dc..88263f3d1c 100644
--- a/tests/test-regex-tr.c
+++ b/tests/test-regex-tr.c
@@ -55,7 +55,7 @@ really_utf8 (void)
 }
 
 int
-main (int argc, char **argv)
+main ()
 {
   struct re_pattern_buffer regex;
   const char *s;
diff --git a/tests/test-regex.c b/tests/test-regex.c
index d5d33606eb..b0a22b54f4 100644
--- a/tests/test-regex.c
+++ b/tests/test-regex.c
@@ -151,7 +151,7 @@ bug_regex11 (void)
 }
 
 int
-main (void)
+main ()
 {
   struct re_pattern_buffer regex;
   unsigned char folded_chars[UCHAR_MAX + 1];
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.