From 4103b2a033e229d6804788a28afd6c9d4a61c131 Mon Sep 17 00:00:00 2001 From: sfb Date: Tue, 18 Jan 2011 12:43:31 -0600 Subject: [PATCH] Fixed: #1236 Applied PackPro's fix for the EGS crash in PD messages, using memcpy instead of casts into the union. --- code/ryzom/server/src/pd_lib/pd_messages.h | 60 ++++++++++++++++++---- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/code/ryzom/server/src/pd_lib/pd_messages.h b/code/ryzom/server/src/pd_lib/pd_messages.h index a923809d9..30cbf3a5f 100644 --- a/code/ryzom/server/src/pd_lib/pd_messages.h +++ b/code/ryzom/server/src/pd_lib/pd_messages.h @@ -257,12 +257,33 @@ public: setHeader(UpdateValue); 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); } - 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); } - + //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)); } @@ -274,10 +295,31 @@ public: uint sz; - 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); } + // 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); } + //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));