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?
* Florian Weimer:
> * 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.
Ugh, I got that backwards. The test is unconditionally valid as long
as the byte is found in the allocated part of the buffer.