diff --git a/lib/dnet_ntop.c b/lib/dnet_ntop.c index 9500df86..507a7eb8 100644 --- a/lib/dnet_ntop.c +++ b/lib/dnet_ntop.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -35,11 +36,14 @@ static __inline__ int do_digit(char *str, u_int16_t *addr, u_int16_t scale, size static const char *dnet_ntop1(const struct dn_naddr *dna, char *str, size_t len) { - u_int16_t addr = dn_ntohs(*(u_int16_t *)dna->a_addr); - u_int16_t area = addr >> 10; + u_int16_t addr, area; size_t pos = 0; int started = 0; + memcpy(&addr, dna->a_addr, sizeof(addr)); + addr = dn_ntohs(addr); + area = addr >> 10; + if (dna->a_len != 2) return NULL; diff --git a/lib/dnet_pton.c b/lib/dnet_pton.c index bd7727ae..73857562 100644 --- a/lib/dnet_pton.c +++ b/lib/dnet_pton.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -37,6 +38,7 @@ static int dnet_num(const char *src, u_int16_t * dst) static int dnet_pton1(const char *src, struct dn_naddr *dna) { + u_int16_t addr; u_int16_t area = 0; u_int16_t node = 0; int pos; @@ -48,7 +50,8 @@ static int dnet_pton1(const char *src, struct dn_naddr *dna) if ((pos == 0) || (node > 1023)) return 0; dna->a_len = 2; - *(u_int16_t *)dna->a_addr = dn_htons((area << 10) | node); + addr = dn_htons((area << 10) | node); + memcpy(dna->a_addr, &addr, sizeof(addr)); return 1; }