diff options
author | NIIBE Yutaka <[email protected]> | 2016-02-15 01:55:34 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2016-02-15 01:55:34 +0000 |
commit | 6fbe12a51e8fe2649ffe5a8a02aa93026a8f02cd (patch) | |
tree | 852f14d1634b6edc242736ae5f3a1ed430bcca44 | |
parent | Put asterisks in front of two function descriptions. (diff) | |
download | gnupg-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.c | 20 |
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; |