From 7117b61bf4e3cd7b5ceb3381708e0ed926e08722 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 11 Aug 2012 23:12:48 +0300 Subject: [PATCH] Don't do a 64bit read access from a string, since it may not be 64bit aligned. Fixes crash with CPUs that require aligned access. Signed-off-by: Timo Sirainen --- src/network/transportfragment.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/network/transportfragment.cc b/src/network/transportfragment.cc index 6a628c7..ed199d6 100644 --- a/src/network/transportfragment.cc +++ b/src/network/transportfragment.cc @@ -78,9 +78,10 @@ Fragment::Fragment( string &x ) { assert( x.size() >= frag_header_len ); - uint64_t *data64 = (uint64_t *)x.data(); + uint64_t data64; uint16_t *data16 = (uint16_t *)x.data(); - id = be64toh( data64[ 0 ] ); + memcpy( &data64, x.data(), sizeof( data64 ) ); + id = be64toh( data64 ); fragment_num = be16toh( data16[ 4 ] ); final = ( fragment_num & 0x8000 ) >> 15; fragment_num &= 0x7FFF;