Message ID | 20210327162449.3215538-1-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | Check that strnlen won't go beyond the maximum length | expand |
* H. J. Lu via Libc-alpha: > Run strnlen tests on strings without the null byte around the page > boundary. > --- > string/test-strnlen.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/string/test-strnlen.c b/string/test-strnlen.c > index 61eb521dc1..a49d93afa2 100644 > --- a/string/test-strnlen.c > +++ b/string/test-strnlen.c > @@ -196,6 +196,31 @@ do_page_tests (void) > } > } > > +/* Tests meant to unveil fail on implementation that does not access bytes > + without the null character around the page boundary accordingly. */ I don't understand the comment. Based on it, I would have expected a null byte at the page boundary, which is incorrectly ignored by the implementation. > +static void > +do_page_2_tests (void) > +{ > + size_t i, exp_len, offset; > + size_t last_offset = page_size / sizeof (CHAR); > + > + CHAR *s = (CHAR *) buf2; > + memset (s, 65, page_size); I think this needs to use wmemset for the WIDE case, see wcsmbs/test-wcsnlen.c.
diff --git a/string/test-strnlen.c b/string/test-strnlen.c index 61eb521dc1..a49d93afa2 100644 --- a/string/test-strnlen.c +++ b/string/test-strnlen.c @@ -196,6 +196,31 @@ do_page_tests (void) } } +/* Tests meant to unveil fail on implementation that does not access bytes + without the null character around the page boundary accordingly. */ +static void +do_page_2_tests (void) +{ + size_t i, exp_len, offset; + size_t last_offset = page_size / sizeof (CHAR); + + CHAR *s = (CHAR *) buf2; + memset (s, 65, page_size); + + /* Place short strings ending at page boundary. */ + offset = last_offset; + for (i = 0; i < 128; i++) + { + /* Decrease offset to stress several sizes and alignments. */ + offset--; + exp_len = last_offset - offset; + FOR_EACH_IMPL (impl, 0) + { + do_one_test (impl, (CHAR *) (s + offset), exp_len, exp_len); + } + } +} + int test_main (void) { @@ -242,6 +267,7 @@ test_main (void) do_random_tests (); do_page_tests (); + do_page_2_tests (); return ret; }