# HG changeset patch # User Bruno Haible # Date 1536788402 -7200 # Node ID 92143bff3a3f2800e388626538eb054c0aca0385 # Parent 0a3b537c0ef03e8109295556e757df389dd48484 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. diff -r 0a3b537c0ef0 -r 92143bff3a3f ChangeLog --- 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 + + 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 Apply Eric Blake's improvements from 2011-02-25 to more tests. diff -r 0a3b537c0ef0 -r 92143bff3a3f tests/test-c-strcasestr.c --- 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; } diff -r 0a3b537c0ef0 -r 92143bff3a3f tests/test-c-strstr.c --- 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; } diff -r 0a3b537c0ef0 -r 92143bff3a3f tests/test-memmem.c --- 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; } diff -r 0a3b537c0ef0 -r 92143bff3a3f tests/test-strcasestr.c --- 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; } diff -r 0a3b537c0ef0 -r 92143bff3a3f tests/test-strstr.c --- 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; }