GOTBLOCKS & DELETEBLOCKS: test packet size only once 3771/head
authornerzhul <loic.blot@unix-experience.fr>
Tue, 23 Feb 2016 09:58:13 +0000 (10:58 +0100)
committernerzhul <loic.blot@unix-experience.fr>
Tue, 23 Feb 2016 13:24:21 +0000 (14:24 +0100)
src/network/serverpackethandler.cpp

index 7e348a94d134f8a961e83f1342e850bece9cc630..ef99a634f5c824169f63651c5b6a0546c4dc7e16 100644 (file)
@@ -762,14 +762,14 @@ void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
 
        RemoteClient *client = getClient(pkt->getPeerId());
 
-       for (u16 i = 0; i < count; i++) {
-               if ((s16)pkt->getSize() < 1 + (i + 1) * 6)
-                       throw con::InvalidIncomingDataException
+       if ((s16)pkt->getSize() < 1 + (int)count * 6) {
+               throw con::InvalidIncomingDataException
                                ("GOTBLOCKS length is too short");
-               v3s16 p;
+       }
 
+       for (u16 i = 0; i < count; i++) {
+               v3s16 p;
                *pkt >> p;
-
                client->GotBlock(p);
        }
 }
@@ -865,13 +865,14 @@ void Server::handleCommand_DeletedBlocks(NetworkPacket* pkt)
 
        RemoteClient *client = getClient(pkt->getPeerId());
 
-       for (u16 i = 0; i < count; i++) {
-               if ((s16)pkt->getSize() < 1 + (i + 1) * 6)
-                       throw con::InvalidIncomingDataException
+       if ((s16)pkt->getSize() < 1 + (int)count * 6) {
+               throw con::InvalidIncomingDataException
                                ("DELETEDBLOCKS length is too short");
+       }
+
+       for (u16 i = 0; i < count; i++) {
                v3s16 p;
                *pkt >> p;
-
                client->SetBlockNotSent(p);
        }
 }