diff --git a/src/waltz/tls/fd_tls_proto.c b/src/waltz/tls/fd_tls_proto.c index 40c0f5f52cc..918a79a4f08 100644 --- a/src/waltz/tls/fd_tls_proto.c +++ b/src/waltz/tls/fd_tls_proto.c @@ -254,7 +254,9 @@ fd_tls_encode_client_hello( fd_tls_client_hello_t const * in, # undef FIELDS } - *extension_tot_sz = fd_ushort_bswap( (ushort)( (ulong)wire_laddr - extension_start ) ); + + ushort ext_tot_sz_tmp = fd_ushort_bswap( (ushort)( (ulong)wire_laddr - extension_start ) ); + fd_memcpy( extension_tot_sz, &ext_tot_sz_tmp, sizeof(ushort) ); return (long)( wire_laddr - (ulong)wire ); } diff --git a/src/waltz/tls/fd_tls_serde.h b/src/waltz/tls/fd_tls_serde.h index 1f1955d08fa..d6b4695ce7e 100644 --- a/src/waltz/tls/fd_tls_serde.h +++ b/src/waltz/tls/fd_tls_serde.h @@ -54,10 +54,15 @@ do { \ uchar * dest = (uchar *)_field_##IDX##_laddr; \ memcpy( dest, (FIELD), _field_##IDX##_sz ); \ - FIELD_TYPE * ele = fd_type_pun( dest ); \ for( ulong i=0; i<(FIELD_CNT); i++ ) { \ - *ele = fd_##FIELD_TYPE##_bswap( *ele ); \ - ele++; \ + const ulong shared_offset = i*sizeof(FIELD_TYPE); \ + if( sizeof(FIELD_TYPE) > 1 ) { \ + ulong limit = (sizeof(FIELD_TYPE)>>1); \ + for( ulong j = 0; j < limit; j++ ) { \ + fd_swap( dest[shared_offset+j], \ + dest[shared_offset+sizeof(FIELD_TYPE)-1-j]); \ + } \ + } \ } \ } while(0);