diff --git a/p2p/base/stun.cc b/p2p/base/stun.cc index 66b53128a5..d2897747bb 100644 --- a/p2p/base/stun.cc +++ b/p2p/base/stun.cc @@ -364,8 +364,10 @@ bool StunMessage::Read(ByteBufferReader* buf) { if (!buf->ReadString(&transaction_id, kStunTransactionIdLength)) return false; - uint32_t magic_cookie_int = - *reinterpret_cast(magic_cookie.data()); + uint32_t magic_cookie_int; + static_assert(sizeof(magic_cookie_int) == kStunMagicCookieLength, + "Integer size mismatch: magic_cookie_int and kStunMagicCookie"); + std::memcpy(&magic_cookie_int, magic_cookie.data(), sizeof(magic_cookie_int)); if (rtc::NetworkToHost32(magic_cookie_int) != kStunMagicCookie) { // If magic cookie is invalid it means that the peer implements // RFC3489 instead of RFC5389. diff --git a/p2p/base/stun.h b/p2p/base/stun.h index e61b345fd7..caaa4745b4 100644 --- a/p2p/base/stun.h +++ b/p2p/base/stun.h @@ -110,7 +110,7 @@ const size_t kStunHeaderSize = 20; const size_t kStunTransactionIdOffset = 8; const size_t kStunTransactionIdLength = 12; const uint32_t kStunMagicCookie = 0x2112A442; -const size_t kStunMagicCookieLength = sizeof(kStunMagicCookie); +constexpr size_t kStunMagicCookieLength = sizeof(kStunMagicCookie); // Following value corresponds to an earlier version of STUN from // RFC3489.