masking_key casting fix to resolve aliasing warnings #references 72

This commit is contained in:
Peter Thorson
2012-02-20 06:56:41 -06:00
parent c2cbe7110d
commit f0365ba42e
3 changed files with 21 additions and 7 deletions

View File

@@ -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<int32_t*>(m_masking_key) = key;
//*reinterpret_cast<int32_t*>(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

View File

@@ -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<int32_t*>(m_masking_key) = key;
m_masking_key.i = key;
//*reinterpret_cast<int32_t*>(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);
}
}

View File

@@ -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;