Fixed: #1236 Applied PackPro's fix for the EGS crash in PD messages, using memcpy instead of casts into the union.

This commit is contained in:
sfb 2011-01-18 12:43:31 -06:00
parent 1c2461c523
commit e7f3d24aa1

View file

@ -257,12 +257,33 @@ public:
setHeader(UpdateValue); setHeader(UpdateValue);
uint sz = 0; uint sz = 0;
// update 20101119 by packpro
if (sizeof(value) == 1)
{
sz = 0;
memcpy(&(_Value0[0]), &value, sizeof(value));
}
else if (sizeof(value) == 2)
{
sz = 1;
memcpy(&(_Value1[0]), &value, sizeof(value));
}
else if (sizeof(value) == 4)
{
sz = 2;
memcpy(&(_Value2[0]), &value, sizeof(value));
}
else if (sizeof(value) == 8)
{
sz = 3;
memcpy(&(_Value3[0]), &value, sizeof(value));
}
if (sizeof(value) == 1) { sz = 0; _Value0[0] = *(uint8*)(&value); } //if (sizeof(value) == 1) { sz = 0; _Value0[0] = *(uint8*)(&value); }
else if (sizeof(value) == 2) { sz = 1; _Value1[0] = *(uint16*)(&value); } //else if (sizeof(value) == 2) { sz = 1; _Value1[0] = *(uint16*)(&value); }
else if (sizeof(value) == 4) { sz = 2; _Value2[0] = *(uint32*)(&value); } //else if (sizeof(value) == 4) { sz = 2; _Value2[0] = *(uint32*)(&value); }
else if (sizeof(value) == 8) { sz = 3; _Value3[0] = *(uint64*)(&value); } //else if (sizeof(value) == 8) { sz = 3; _Value3[0] = *(uint64*)(&value); }
_ColumnAndSize = (uint16)(column | (sz << 14)); _ColumnAndSize = (uint16)(column | (sz << 14));
} }
@ -274,10 +295,31 @@ public:
uint sz; uint sz;
if (sizeof(value) == 1) { sz = 0; _Value0[0] = *(uint8*)(&value); } // update 20101119 by packpro
else if (sizeof(value) == 2) { sz = 1; _Value1[0] = *(uint16*)(&value); } if (sizeof(value) == 1)
else if (sizeof(value) == 4) { sz = 2; _Value2[0] = *(uint32*)(&value); } {
else if (sizeof(value) == 8) { sz = 3; _Value3[0] = *(uint64*)(&value); } sz = 0;
memcpy(&(_Value0[0]), &value, sizeof(value));
}
else if (sizeof(value) == 2)
{
sz = 1;
memcpy(&(_Value1[0]), &value, sizeof(value));
}
else if (sizeof(value) == 4)
{
sz = 2;
memcpy(&(_Value2[0]), &value, sizeof(value));
}
else if (sizeof(value) == 8)
{
sz = 3;
memcpy(&(_Value3[0]), &value, sizeof(value));
}
//if (sizeof(value) == 1) { sz = 0; _Value0[0] = *(uint8*)(&value); }
//else if (sizeof(value) == 2) { sz = 1; _Value1[0] = *(uint16*)(&value); }
//else if (sizeof(value) == 4) { sz = 2; _Value2[0] = *(uint32*)(&value); }
//else if (sizeof(value) == 8) { sz = 3; _Value3[0] = *(uint64*)(&value); }
_ColumnAndSize = (uint16)(column | (sz << 14)); _ColumnAndSize = (uint16)(column | (sz << 14));