diff --git a/src/messages/control.hpp b/src/messages/control.hpp index 1a7012a06c..fcd3b8c456 100644 --- a/src/messages/control.hpp +++ b/src/messages/control.hpp @@ -67,7 +67,7 @@ public: if (!input.fail()) { if (m_masking_index >= 0) { - c = c ^ m_masking_key[(m_masking_index++)%4]; + c = c ^ m_masking_key.c[(m_masking_index++)%4]; } m_payload.push_back(c); @@ -133,7 +133,8 @@ public: } void set_masking_key(int32_t key) { - *reinterpret_cast(m_masking_key) = key; + //*reinterpret_cast(m_masking_key) = key; + m_masking_key.i = key; m_masking_index = (key == 0 ? -1 : 0); } private: @@ -153,6 +154,11 @@ private: static const uint64_t PAYLOAD_SIZE_INIT = 128; // 128B static const uint64_t PAYLOAD_SIZE_MAX = 128; // 128B + union masking_key { + int32_t i; + char c[4]; + }; + // Message state frame::opcode::value m_opcode; @@ -160,7 +166,8 @@ private: utf8_validator::validator m_validator; // Masking state - unsigned char m_masking_key[4]; + masking_key m_masking_key; + //unsigned char m_masking_key[4]; int m_masking_index; // Message payload diff --git a/src/messages/data.cpp b/src/messages/data.cpp index c09e33c264..a4e9c9ba2d 100644 --- a/src/messages/data.cpp +++ b/src/messages/data.cpp @@ -83,7 +83,7 @@ uint64_t data::process_payload(std::istream& input,uint64_t size) { void data::process_character(unsigned char c) { if (m_masking_index >= 0) { - c = c ^ m_masking_key[m_masking_index]; + c = c ^ m_masking_key.c[m_masking_index]; m_masking_index = index_value((m_masking_index+1)%4); } @@ -127,7 +127,8 @@ void data::validate_payload() { } void data::set_masking_key(int32_t key) { - *reinterpret_cast(m_masking_key) = key; + m_masking_key.i = key; + //*reinterpret_cast(m_masking_key) = key; m_masking_index = (key == 0 ? M_MASK_KEY_ZERO : M_BYTE_0); } @@ -152,7 +153,7 @@ void data::append_payload(const std::string& payload) { void data::mask() { if (m_masking_index >= 0) { for (std::string::iterator it = m_payload.begin(); it != m_payload.end(); it++) { - (*it) = *it ^ m_masking_key[m_masking_index]; + (*it) = *it ^ m_masking_key.c[m_masking_index]; m_masking_index = index_value((m_masking_index+1)%4); } } diff --git a/src/messages/data.hpp b/src/messages/data.hpp index c22bce1523..6767486543 100644 --- a/src/messages/data.hpp +++ b/src/messages/data.hpp @@ -202,6 +202,11 @@ private: M_BYTE_3 = 3 }; + union masking_key { + int32_t i; + char c[4]; + }; + friend void intrusive_ptr_add_ref(const data * s) { ++s->m_ref_count; } @@ -232,7 +237,8 @@ private: utf8_validator::validator m_validator; // Masking state - unsigned char m_masking_key[4]; + masking_key m_masking_key; + //unsigned char m_masking_key[4]; // m_masking_index can take on index_value m_masking_index;