From: Cirilo B. <pin...@us...> - 2005-09-30 00:19:57
|
Update of /cvsroot/once/oncecode/src/server/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28937/server/net Modified Files: ocsrvnetmgr.cpp Log Message: Reverting to the endian-safe routines again Index: ocsrvnetmgr.cpp =================================================================== RCS file: /cvsroot/once/oncecode/src/server/net/ocsrvnetmgr.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** ocsrvnetmgr.cpp 28 Sep 2005 19:11:58 -0000 1.35 --- ocsrvnetmgr.cpp 30 Sep 2005 00:19:45 -0000 1.36 *************** *** 667,678 **** { int type; ! unsigned int len; ! unsigned int lenchk; char *data; if (pkt->data[0] == (char)ID_TIMESTAMP) { ! len = ntohl(*((int *)(&(pkt->data[sizeof(char) + sizeof(int)])))); ! type = ntohl(*((int *)(&(pkt->data[sizeof(char) + sizeof(int) + sizeof(int)])))); data = (char *)(&(pkt->data[sizeof(char) + sizeof(int) + 2*sizeof(int)])); lenchk = len + sizeof(char) + sizeof(int) + 2*sizeof(int); --- 667,684 ---- { int type; ! int len; ! int lenchk; char *data; + int tstamp; + // Malicious packet; it contains no message [timestamp] + type + length + #define CHECK_PKT_LEN(arg) if (pkt->length < ( arg )) {\ + netmgr->DeallocatePacket(pkt); return NULL; } + if (pkt->data[0] == (char)ID_TIMESTAMP) { ! CHECK_PKT_LEN(13); // 13 = sizeof(char) + 3*sizeof(int32) ! NetReadInt32(len, pkt->data + sizeof(char) + sizeof(int)); ! NetReadInt32(type, pkt->data + sizeof(char) + sizeof(int) + sizeof(int)); data = (char *)(&(pkt->data[sizeof(char) + sizeof(int) + 2*sizeof(int)])); lenchk = len + sizeof(char) + sizeof(int) + 2*sizeof(int); *************** *** 680,685 **** else { ! len = ntohl(*((int *)(&(pkt->data[sizeof(char)])))); ! type = ntohl(*((int *)(&(pkt->data[sizeof(char) + sizeof(int)])))); data = (char *)(&(pkt->data[sizeof(char) + 2*sizeof(int)])); lenchk = len + sizeof(char) + 2*sizeof(int); --- 686,692 ---- else { ! CHECK_PKT_LEN(9); // 9 = sizeof(char) + 2*sizeof(int32) ! NetReadInt32(len, pkt->data + sizeof(char)); ! NetReadInt32(type, pkt->data + sizeof(char) + sizeof(int)); data = (char *)(&(pkt->data[sizeof(char) + 2*sizeof(int)])); lenchk = len + sizeof(char) + 2*sizeof(int); *************** *** 714,718 **** if (pkt->data[0] == (char)ID_TIMESTAMP) ! msg->SetTimeStamp(*((int *)(&(pkt->data[sizeof(char)])))); else msg->SetTimeStamp(0); --- 721,728 ---- if (pkt->data[0] == (char)ID_TIMESTAMP) ! { ! NetReadInt32(tstamp, pkt->data + sizeof(char)); ! msg->SetTimeStamp(tstamp); ! } else msg->SetTimeStamp(0); |