[PATCH] string: Add tests for zero length string inputs
Rich Felker
dalias@libc.org
Tue Sep 23 15:06:00 GMT 2014
On Tue, Sep 23, 2014 at 03:58:27PM +0100, Richard Earnshaw wrote:
> On 23/09/14 14:57, Paul Eggert wrote:
> > Richard Earnshaw wrote:
> >
> >> if src+1 can point outside of the address space of the program
> >
> > As Andreas points out, src+1 does not point outside the address space of
> > the program. It is a valid pointer.
> >
>
> OK, so do we agree that for a valid pointer P, if P is *not*
> dereferencable, then P-1 must be? Put another way, if P and P-1 are in
> the same 'page' then it is safe to dereference them.
Nope.
struct foo {
char a;
int b[];
}
struct foo *bar = malloc(sizeof *bar);
int *p = (int *)((unsigned char *)bar + offsetof(struct foo, b));
Now neither p nor p-1 is dereferencable, but p is a valid pointer (to
a byte within the representation array of *bar, cast to int*).
Note that the reason I used a flexible array member was to get an
offset that's valid for an object of type int (so that the cast to
int* isn't an alignment violation) but where no object actually
exists.
Rich
More information about the Libc-alpha
mailing list