Commit 292994b0 authored by Nikias Bassen's avatar Nikias Bassen

bplist: Work around misaligned reads reported by AddressSanitizer

These misaligned reads reported by ASAN might lead to undefined behavior.
parent 5c6e695c
...@@ -269,11 +269,11 @@ static plist_t parse_real_node(const char **bnode, uint8_t size) ...@@ -269,11 +269,11 @@ static plist_t parse_real_node(const char **bnode, uint8_t size)
switch (size) switch (size)
{ {
case sizeof(uint32_t): 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; data->realval = *(float *) buf;
break; break;
case sizeof(uint64_t): 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; data->realval = *(double *) buf;
break; break;
default: default:
...@@ -394,7 +394,7 @@ static plist_t parse_unicode_node(const char **bnode, uint64_t size) ...@@ -394,7 +394,7 @@ static plist_t parse_unicode_node(const char **bnode, uint64_t size)
return NULL; return NULL;
} }
for (i = 0; i < size; i++) 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); tmpstr = plist_utf16_to_utf8(unicodestr, size, &items_read, &items_written);
free(unicodestr); free(unicodestr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment