diff --git a/src/client/ns_turn_msg.c b/src/client/ns_turn_msg.c index 8f0916b4..19d4ab64 100644 --- a/src/client/ns_turn_msg.c +++ b/src/client/ns_turn_msg.c @@ -1282,21 +1282,27 @@ turn_time_t stun_adjust_allocate_lifetime(turn_time_t lifetime, turn_time_t max_ int stun_attr_get_type(stun_attr_ref attr) { if (attr) { - return (int)(nswap16(((const uint16_t *)attr)[0])); + uint16_t val; + memcpy(&val, attr, sizeof(val)); + return (int)(nswap16(val)); } return -1; } int stun_attr_get_len(stun_attr_ref attr) { if (attr) { - return (int)(nswap16(((const uint16_t *)attr)[1])); + uint16_t val; + memcpy(&val, attr + 2, sizeof(val)); + return (int)(nswap16(val)); } return -1; } const uint8_t *stun_attr_get_value(stun_attr_ref attr) { if (attr) { - const int len = (int)(nswap16(((const uint16_t *)attr)[1])); + uint16_t val; + memcpy(&val, attr + 2, sizeof(val)); + const int len = (int)(nswap16(val)); if (len < 1) { return NULL; } @@ -1307,7 +1313,9 @@ const uint8_t *stun_attr_get_value(stun_attr_ref attr) { int stun_get_requested_address_family(stun_attr_ref attr) { if (attr) { - const int len = (int)(nswap16(((const uint16_t *)attr)[1])); + uint16_t raw_len; + memcpy(&raw_len, attr + 2, sizeof(raw_len)); + const int len = (int)(nswap16(raw_len)); if (len != 4) { return STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_VALUE_INVALID; }