From 1a3b2e594c3a2feadc3dd42394deffc96ed27c39 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Thu, 24 Apr 2003 17:05:13 +0000 Subject: Keep our buf ptr aligned to sizeof (char *). Should fix bug #41362. 2003-04-17 Jeffrey Stedfast * e-host-utils.c (e_gethostbyname_r): Keep our buf ptr aligned to sizeof (char *). Should fix bug #41362. (e_gethostbyaddr_r): Same. svn path=/trunk/; revision=20956 --- e-util/ChangeLog | 6 ++++++ e-util/e-host-utils.c | 15 +++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'e-util') diff --git a/e-util/ChangeLog b/e-util/ChangeLog index d678a2fdd8..a146b260d6 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,9 @@ +2003-04-17 Jeffrey Stedfast + + * e-host-utils.c (e_gethostbyname_r): Keep our buf ptr aligned to + sizeof (char *). Should fix bug #41362. + (e_gethostbyaddr_r): Same. + 2003-04-18 Anna Marie Dirks * e-request.c (e_request_string): Added appropriate spacing/padding diff --git a/e-util/e-host-utils.c b/e-util/e-host-utils.c index 248c22afd7..04a2c6373e 100644 --- a/e-util/e-host-utils.c +++ b/e-util/e-host-utils.c @@ -43,6 +43,8 @@ G_LOCK_DEFINE_STATIC (gethost_mutex); #endif +#define ALIGN(x) (((x) + (sizeof (char *) - 1)) & ~(sizeof (char *) - 1)) + #define GETHOST_PROCESS(h, host, buf, buflen, herr) G_STMT_START { \ int num_aliases = 0, num_addrs = 0; \ int req_length; \ @@ -153,6 +155,7 @@ ai_to_herr (int error) break; } } + #endif /* ENABLE_IPv6 */ /** @@ -189,8 +192,8 @@ e_gethostbyname_r (const char *name, struct hostent *host, return -1; } - len = strlen (res->ai_canonname); - if (buflen < IPv6_BUFLEN_MIN + len + 1 + res->ai_addrlen) + len = ALIGN (strlen (res->ai_canonname) + 1); + if (buflen < IPv6_BUFLEN_MIN + len + res->ai_addrlen + sizeof (char *)) return ERANGE; /* h_name */ @@ -217,7 +220,7 @@ e_gethostbyname_r (const char *name, struct hostent *host, memcpy (buf, addr, host->h_length); addr = buf; - buf += host->h_length; + buf += ALIGN (host->h_length); /* h_addr_list */ ((char **) buf)[0] = addr; @@ -309,8 +312,8 @@ e_gethostbyaddr_r (const char *addr, int addrlen, int type, struct hostent *host return -1; } - len = strlen (res->ai_canonname); - if (buflen < IPv6_BUFLEN_MIN + len + 1 + res->ai_addrlen) + len = ALIGN (strlen (res->ai_canonname) + 1); + if (buflen < IPv6_BUFLEN_MIN + len + res->ai_addrlen + sizeof (char *)) return ERANGE; /* h_name */ @@ -337,7 +340,7 @@ e_gethostbyaddr_r (const char *addr, int addrlen, int type, struct hostent *host memcpy (buf, addr, host->h_length); addr = buf; - buf += host->h_length; + buf += ALIGN (host->h_length); /* h_addr_list */ ((char **) buf)[0] = addr; -- cgit v1.2.3