This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Exploiting knowing sizes of string.
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: Joseph Myers <joseph at codesourcery dot com>
- Cc: Richard Earnshaw <Richard dot Earnshaw at foss dot arm dot com>, Jakub Jelinek <jakub at redhat dot com>, gcc at gcc dot gnu dot org
- Date: Thu, 4 Jun 2015 18:36:33 +0200
- Subject: Re: Exploiting knowing sizes of string.
- Authentication-results: sourceware.org; auth=none
- References: <20150604105929 dot GA19141 at domone> <alpine dot DEB dot 2 dot 10 dot 1506041206200 dot 31862 at digraph dot polyomino dot org dot uk> <20150604123319 dot GF10247 at tucnak dot redhat dot com> <20150604125331 dot GA22076 at domone> <20150604125920 dot GG10247 at tucnak dot redhat dot com> <20150604142304 dot GA23875 at domone> <5570757D dot 8050809 at foss dot arm dot com> <alpine dot DEB dot 2 dot 10 dot 1506041559020 dot 12011 at digraph dot polyomino dot org dot uk>
On Thu, Jun 04, 2015 at 04:01:50PM +0000, Joseph Myers wrote:
> On Thu, 4 Jun 2015, Richard Earnshaw wrote:
>
> > > Change that into
> > >
> > > int foo(char *s)
> > > {
> > > int l = strlen (s);
> > > char *p = memchr (s, 'a', l);
> > > return p+l;
> > > }
> > >
> >
> > Which is still meaningless if 'a' does not appear in s => when the
> > result is NULL + l.
> >
> > In fact, unless 'a' is the first character the result is possibly
> > meaningless anyway, since you can't know that p+l doesn't point more
> > than one beyond the end of the object.
> >
> > Perhaps you just meant to return 'p'?
>
> And if size_t is wider than int, this function truncates the length of the
> string, so still isn't particularly sensible even if returning p.
>
Correct but doesn't matter that it was mean just to check
transformation, not do anything useful. You could as well use p < s + l - 3.
It just keeps strlen and strchr from being dead, nothing else.
And Joseph you shouldn't restrict yourself only to values that are
present in variables to cover case where its implicit one from strcpy
converted to stpcpy.