This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Should memchr work with invalid data size?
- From: Florian Weimer <fw at deneb dot enyo dot de>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Thu, 18 May 2017 07:52:03 +0200
- Subject: Re: Should memchr work with invalid data size?
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOoZfLVq5_K1Nz16FuH50FBHSvE4J3cFysQBYC_Bxpq9sw@mail.gmail.com>
* H. J. Lu:
> "main memchr" says
>
> The memchr() function scans the initial n bytes of the memory area
> pointed to by s for the first instance of c.
POSIX is more clear:
| Implementations shall behave as if they read the memory byte by byte
| from the beginning of the bytes pointed to by s and stop at the
| first occurrence of c (if it is found in the initial n bytes).
This language is not found in C99.
> But test-memchr.c has
>
> if (pos < len)
> {
> size_t r = random ();
> if ((r & 31) == 0)
> len = ~(uintptr_t) (p + align) - ((r >> 5) & 31);
> result = (CHAR *) (p + pos + align);
> }
>
> which sets len to some random value, like 18446603336355475958.
> Should memchr work with it?
In general, the test is invalid, but it might be a valid test for a
specific implementation.