changeset 39838:92143bff3a3f

Add test case from a recent glibc bug. * tests/test-strstr.c (main): Add test of long needle. * tests/test-strcasestr.c (main): Likewise. * tests/test-c-strstr.c (main): Likewise. * tests/test-c-strcasestr.c (main): Likewise. * tests/test-memmem.c (main): Likewise.
author Bruno Haible <bruno@clisp.org>
date Wed, 12 Sep 2018 23:40:02 +0200
parents 0a3b537c0ef0
children 1a0210f4cbf7
files ChangeLog tests/test-c-strcasestr.c tests/test-c-strstr.c tests/test-memmem.c tests/test-strcasestr.c tests/test-strstr.c
diffstat 6 files changed, 119 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Sep 12 21:30:42 2018 +0200
+++ b/ChangeLog	Wed Sep 12 23:40:02 2018 +0200
@@ -1,3 +1,12 @@
+2018-09-12  Bruno Haible  <bruno@clisp.org>
+
+	Add test case from a recent glibc bug.
+	* tests/test-strstr.c (main): Add test of long needle.
+	* tests/test-strcasestr.c (main): Likewise.
+	* tests/test-c-strstr.c (main): Likewise.
+	* tests/test-c-strcasestr.c (main): Likewise.
+	* tests/test-memmem.c (main): Likewise.
+
 2018-09-12  Bruno Haible  <bruno@clisp.org>
 
 	Apply Eric Blake's improvements from 2011-02-25 to more tests.
--- a/tests/test-c-strcasestr.c	Wed Sep 12 21:30:42 2018 +0200
+++ b/tests/test-c-strcasestr.c	Wed Sep 12 23:40:02 2018 +0200
@@ -238,5 +238,27 @@
     free (haystack);
   }
 
+  /* Test long needles.  */
+  {
+    size_t m = 1024;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    if (haystack != NULL && needle != NULL)
+      {
+        const char *p;
+        haystack[0] = 'x';
+        memset (haystack + 1, ' ', m - 1);
+        memset (haystack + m, 'x', m);
+        haystack[2 * m] = '\0';
+        memset (needle, 'X', m);
+        needle[m] = '\0';
+        p = c_strcasestr (haystack, needle);
+        ASSERT (p);
+        ASSERT (p - haystack == m);
+      }
+    free (needle);
+    free (haystack);
+  }
+
   return 0;
 }
--- a/tests/test-c-strstr.c	Wed Sep 12 21:30:42 2018 +0200
+++ b/tests/test-c-strstr.c	Wed Sep 12 23:40:02 2018 +0200
@@ -212,5 +212,27 @@
     free (haystack);
   }
 
+  /* Test long needles.  */
+  {
+    size_t m = 1024;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    if (haystack != NULL && needle != NULL)
+      {
+        const char *p;
+        haystack[0] = 'x';
+        memset (haystack + 1, ' ', m - 1);
+        memset (haystack + m, 'x', m);
+        haystack[2 * m] = '\0';
+        memset (needle, 'x', m);
+        needle[m] = '\0';
+        p = c_strstr (haystack, needle);
+        ASSERT (p);
+        ASSERT (p - haystack == m);
+      }
+    free (needle);
+    free (haystack);
+  }
+
   return 0;
 }
--- a/tests/test-memmem.c	Wed Sep 12 21:30:42 2018 +0200
+++ b/tests/test-memmem.c	Wed Sep 12 23:40:02 2018 +0200
@@ -289,5 +289,27 @@
     free (haystack);
   }
 
+  /* Test long needles.  */
+  {
+    size_t m = 1024;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    if (haystack != NULL && needle != NULL)
+      {
+        const char *p;
+        haystack[0] = 'x';
+        memset (haystack + 1, ' ', m - 1);
+        memset (haystack + m, 'x', m);
+        haystack[2 * m] = '\0';
+        memset (needle, 'x', m);
+        needle[m] = '\0';
+        p = memmem (haystack, strlen (haystack), needle, strlen (needle));
+        ASSERT (p);
+        ASSERT (p - haystack == m);
+      }
+    free (needle);
+    free (haystack);
+  }
+
   return 0;
 }
--- a/tests/test-strcasestr.c	Wed Sep 12 21:30:42 2018 +0200
+++ b/tests/test-strcasestr.c	Wed Sep 12 23:40:02 2018 +0200
@@ -252,5 +252,27 @@
     free (haystack);
   }
 
+  /* Test long needles.  */
+  {
+    size_t m = 1024;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    if (haystack != NULL && needle != NULL)
+      {
+        const char *p;
+        haystack[0] = 'x';
+        memset (haystack + 1, ' ', m - 1);
+        memset (haystack + m, 'x', m);
+        haystack[2 * m] = '\0';
+        memset (needle, 'X', m);
+        needle[m] = '\0';
+        p = strcasestr (haystack, needle);
+        ASSERT (p);
+        ASSERT (p - haystack == m);
+      }
+    free (needle);
+    free (haystack);
+  }
+
   return 0;
 }
--- a/tests/test-strstr.c	Wed Sep 12 21:30:42 2018 +0200
+++ b/tests/test-strstr.c	Wed Sep 12 23:40:02 2018 +0200
@@ -275,5 +275,27 @@
     free (haystack);
   }
 
+  /* Test long needles.  */
+  {
+    size_t m = 1024;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    if (haystack != NULL && needle != NULL)
+      {
+        const char *p;
+        haystack[0] = 'x';
+        memset (haystack + 1, ' ', m - 1);
+        memset (haystack + m, 'x', m);
+        haystack[2 * m] = '\0';
+        memset (needle, 'x', m);
+        needle[m] = '\0';
+        p = strstr (haystack, needle);
+        ASSERT (p);
+        ASSERT (p - haystack == m);
+      }
+    free (needle);
+    free (haystack);
+  }
+
   return 0;
 }