Mercurial > gnulib
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; }