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 <tss@iki.fi>
This commit is contained in:
Timo Sirainen
2012-08-11 23:12:48 +03:00
committed by Keith Winstein
parent 620152261e
commit 7117b61bf4
+3 -2
View File
@@ -78,9 +78,10 @@ Fragment::Fragment( string &x )
{ {
assert( x.size() >= frag_header_len ); assert( x.size() >= frag_header_len );
uint64_t *data64 = (uint64_t *)x.data(); uint64_t data64;
uint16_t *data16 = (uint16_t *)x.data(); 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 ] ); fragment_num = be16toh( data16[ 4 ] );
final = ( fragment_num & 0x8000 ) >> 15; final = ( fragment_num & 0x8000 ) >> 15;
fragment_num &= 0x7FFF; fragment_num &= 0x7FFF;