diff --git a/ChangeLog b/ChangeLog index 40e04892f..3a93ae589 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-04-19 Adam Fedor + + * Tools/gdomap.c (init_iface): Round size to make sure we don't violate + pointer alignment boundaries. + 2005-04-14 Richard Frith-Macdonald * Source/Additions/GSMime.m: Add tweak to cope with buggy mailers diff --git a/Tools/gdomap.c b/Tools/gdomap.c index c825597f1..8380bede6 100644 --- a/Tools/gdomap.c +++ b/Tools/gdomap.c @@ -128,6 +128,10 @@ #define MAX_EXTRA ((GDO_NAME_MAX_LEN - 2 * IASIZE)/IASIZE) +#define ROUND(V, A) \ + ({ typeof(V) __v=(V); typeof(A) __a=(A); \ + __a*((__v+__a-1)/__a); }) + typedef unsigned char *uptr; #ifndef __MINGW__ static int is_daemon = 0; /* Currently running as daemon. */ @@ -1265,7 +1269,8 @@ init_iface() { ifreq = *(struct ifreq*)ifr_ptr; #ifdef HAVE_SA_LEN - ifr_ptr += sizeof(ifreq) - sizeof(ifreq.ifr_addr) + ifreq.ifr_addr.sa_len; + ifr_ptr += sizeof(ifreq) - sizeof(ifreq.ifr_addr) + + ROUND(ifreq.ifr_addr.sa_len, sizeof(struct ifreq*)); #else ifr_ptr += sizeof(ifreq); #endif