From 292994b09fcfac64e14de3b20eab7821614e33dd Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 29 May 2017 03:54:24 +0200 Subject: bplist: Work around misaligned reads reported by AddressSanitizer These misaligned reads reported by ASAN might lead to undefined behavior. --- src/bplist.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bplist.c b/src/bplist.c index 9acd6ae..67513e6 100644 --- a/src/bplist.c +++ b/src/bplist.c @@ -269,11 +269,11 @@ static plist_t parse_real_node(const char **bnode, uint8_t size) switch (size) { case sizeof(uint32_t): - *(uint32_t*)buf = float_bswap32(*(uint32_t*)*bnode); + *(uint32_t*)buf = float_bswap32(get_unaligned((uint32_t*)*bnode)); data->realval = *(float *) buf; break; case sizeof(uint64_t): - *(uint64_t*)buf = float_bswap64(*(uint64_t*)*bnode); + *(uint64_t*)buf = float_bswap64(get_unaligned((uint64_t*)*bnode)); data->realval = *(double *) buf; break; default: @@ -394,7 +394,7 @@ static plist_t parse_unicode_node(const char **bnode, uint64_t size) return NULL; } for (i = 0; i < size; i++) - unicodestr[i] = be16toh(((uint16_t*)*bnode)[i]); + unicodestr[i] = be16toh(get_unaligned((uint16_t*)(*bnode+(i<<1)))); tmpstr = plist_utf16_to_utf8(unicodestr, size, &items_read, &items_written); free(unicodestr); -- cgit v1.1-32-gdbae