Re: [manual]: rawmemchr(3) and UB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Cristian,

On 12/29/22 20:45, Cristian Rodríguez wrote:
On Thu, Dec 29, 2022 at 4:20 PM Alejandro Colomar via Libc-alpha
<libc-alpha@xxxxxxxxxxxxxx> wrote:

Hi,

I was reading rawmemchr(3), and found some funny text:

RETURN VALUE
         The  memchr()  and memrchr() functions return a pointer to the matching
         byte or NULL if the character does not occur in the given memory area.

         The rawmemchr() function returns a pointer to the matching byte, if one
         is found.  If no matching byte is found, the result is unspecified.


Of course, if the byte is not found, the result is not unspecified, but rather
undefined, and a crash is very likely so maybe there's not even a result.  I
thought this might be a thinko of the manual page, but the glibc manual seems to
have similar text:


The library itself uses this function mostly to find NULL as an
optimization. This is all before GCC handled all of this so it is
mostly obsolete.
gcc replaces null byte searches that use str*chr with s + strlen(s)
and expands memchr c=null  and rawmemchr-like patterns inline.

You mean that GCC does the following?:


inline size_t
strlen(const char *s)
{
	return rawmemchr(s, '\0');
}


If so, great, because I am writing a libc replacement, and was implementing strlen(3) exactly like that, which is why I needed the docs. It may be something not very useful, but I guess it's still very useful for libc internals.

Cheers,

Alex

--
<http://www.alejandro-colomar.es/>

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux