Xtonlsab bug

Joakim Tjernlund joakim.tjernlund at transmode.se
Fri Apr 30 16:38:26 CEST 2010


Ondrej Zajicek <santiago at crfreenet.org> wrote on 2010/04/30 10:19:15:
>
> On Thu, Apr 29, 2010 at 11:57:32PM +0200, Joakim Tjernlund wrote:
> >
> > Ondrej Zajicek <santiago at crfreenet.org> wrote on 2010/04/29 23:15:22:
> > >
> > > On Thu, Apr 29, 2010 at 11:03:32PM +0200, Joakim Tjernlund wrote:
> > > >
> > > > Ondrej, this looks buggy:
> > > >
> > > > +static inline void htonlsab(void *h, void *n, u16 len) { memcpy(n, h, len); };
> > > > +static inline void ntohlsab(void *n, void *h, u16 len) { memcpy(h, n, len); };
> > > >
> > > > memcpy is not defined to handle overlapping memory. Best to add:
> > > > if (n != h)
> > > >   memcpy(...)
> > >
> > > Yes, but all usages of htonlsab()/ntohlsab() are non-overlapping.
> > > (overlapping/on place usage was replaced with htonlsab1()/ntohlsab1()).
> >
> > I see, but it would be safer to have that check in case you
> > used them in the wrong way?
>
> I think this is no issue. Even if someone used them in a wrong way
> (which is improbable, as these functions are used just in a few
> places), memcpy() would probably do nothing when src==dst (although
> it is unspecified).

gcc mail list does not agree, memcpy(p, p, len) is
a bug and you cannot rely on it.

       Jocke




More information about the Bird-users mailing list