This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] string: Add tests for zero length string inputs
- From: Paul Eggert <eggert at cs dot ucla dot edu>
- To: Richard Earnshaw <rearnsha at arm dot com>, Will Newton <will dot newton at linaro dot org>, OndÅej BÃlka <neleai at seznam dot cz>
- Cc: libc-alpha <libc-alpha at sourceware dot org>
- Date: Mon, 22 Sep 2014 10:48:52 -0700
- Subject: Re: [PATCH] string: Add tests for zero length string inputs
- Authentication-results: sourceware.org; auth=none
- References: <1410910830-20900-1-git-send-email-will dot newton at linaro dot org> <20140919112302 dot GA2912 at domone> <CANu=Dmgn75GZU8my6fcCp1AyJRw8jEJVhaGTD+5mjOrXB_ENGw at mail dot gmail dot com> <542049A4 dot 1070409 at arm dot com>
On 09/22/2014 09:09 AM, Richard Earnshaw wrote:
Valid pointers is more than just non-NULL. In particular, it implies
that is safe to dereference the addressed byte in a source operand even
when the length parameter is zero.
I just reread C99 7.1.4 clause 1 and 7.21.2 clause 2, and I don't see
that implication. For example, the following program appears to be
strictly conforming:
#include <string.h>
char src[1];
char dst[1];
int
main (void)
{
memcpy (dst, src + 1, 0);
return 0;
}
Here, src + 1 is a valid pointer even though one cannot safely
dereference it. So it appears to be reasonable to check that memcpy
doesn't dereference the source when the size is zero.