From cf693d510fe2ced82266470e408ca132c87d23be Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 12 Sep 2018 23:40:02 +0200 Subject: [PATCH] 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. --- ChangeLog | 9 +++++++++ tests/test-c-strcasestr.c | 22 ++++++++++++++++++++++ tests/test-c-strstr.c | 22 ++++++++++++++++++++++ tests/test-memmem.c | 22 ++++++++++++++++++++++ tests/test-strcasestr.c | 22 ++++++++++++++++++++++ tests/test-strstr.c | 22 ++++++++++++++++++++++ 6 files changed, 119 insertions(+) diff --git a/ChangeLog b/ChangeLog index c5b5118848..2f89dcdbd5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 --git a/tests/test-c-strcasestr.c b/tests/test-c-strcasestr.c index ac1c44d41f..f594be6749 100644 --- a/tests/test-c-strcasestr.c +++ b/tests/test-c-strcasestr.c @@ -238,5 +238,27 @@ main () 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 --git a/tests/test-c-strstr.c b/tests/test-c-strstr.c index 307dde772e..25e7d43c26 100644 --- a/tests/test-c-strstr.c +++ b/tests/test-c-strstr.c @@ -212,5 +212,27 @@ main () 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 --git a/tests/test-memmem.c b/tests/test-memmem.c index 622932d25c..264e82456a 100644 --- a/tests/test-memmem.c +++ b/tests/test-memmem.c @@ -289,5 +289,27 @@ main (int argc, char *argv[]) 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 --git a/tests/test-strcasestr.c b/tests/test-strcasestr.c index 21192bc2a8..4c651ecc09 100644 --- a/tests/test-strcasestr.c +++ b/tests/test-strcasestr.c @@ -252,5 +252,27 @@ main () 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 --git a/tests/test-strstr.c b/tests/test-strstr.c index 5ba6cb823d..9538403eea 100644 --- a/tests/test-strstr.c +++ b/tests/test-strstr.c @@ -275,5 +275,27 @@ main (int argc, char *argv[]) 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; } -- 2.39.5