aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2016-02-15 01:55:34 +0000
committerNIIBE Yutaka <[email protected]>2016-02-15 01:55:34 +0000
commit6fbe12a51e8fe2649ffe5a8a02aa93026a8f02cd (patch)
tree852f14d1634b6edc242736ae5f3a1ed430bcca44
parentPut asterisks in front of two function descriptions. (diff)
downloadgnupg-6fbe12a51e8fe2649ffe5a8a02aa93026a8f02cd.tar.gz
gnupg-6fbe12a51e8fe2649ffe5a8a02aa93026a8f02cd.zip
dirmngr: fix for memory alignment.
* dirmngr/dns-stuff.c (get_dns_cert): Cast through void *. (getsrv, get_dns_cname): Make sure it's aligned for HEADER. -- Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--dirmngr/dns-stuff.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c
index 40c71f37b..191719e93 100644
--- a/dirmngr/dns-stuff.c
+++ b/dirmngr/dns-stuff.c
@@ -821,8 +821,8 @@ get_dns_cert (const char *name, int want_certtype,
answer, 65536);
/* Not too big, not too small, no errors and at least 1 answer. */
if (r >= sizeof (HEADER) && r <= 65536
- && (((HEADER *) answer)->rcode) == NOERROR
- && (count = ntohs (((HEADER *) answer)->ancount)))
+ && (((HEADER *)(void *) answer)->rcode) == NOERROR
+ && (count = ntohs (((HEADER *)(void *) answer)->ancount)))
{
int rc;
unsigned char *pt, *emsg;
@@ -1081,8 +1081,12 @@ getsrv (const char *name,struct srventry **list)
}
#else /*!USE_ADNS*/
{
- unsigned char answer[2048];
- HEADER *header = (HEADER *)answer;
+ union {
+ unsigned char ans[2048];
+ HEADER header[1];
+ } res;
+ unsigned char *answer = res.ans;
+ HEADER *header = res.header;
unsigned char *pt, *emsg;
int r;
u16 dlen;
@@ -1305,8 +1309,12 @@ get_dns_cname (const char *name, char **r_cname)
}
#else /*!USE_ADNS*/
{
- unsigned char answer[2048];
- HEADER *header = (HEADER *)answer;
+ union {
+ unsigned char ans[2048];
+ HEADER header[1];
+ } res;
+ unsigned char *answer = res.ans;
+ HEADER *header = res.header;
unsigned char *pt, *emsg;
int r;
char *cname;