src/network/core/udp.c
changeset 5823 7cd91e6e5c71
parent 5803 b1079690e27d
--- a/src/network/core/udp.c	Tue Jan 09 07:24:35 2007 +0000
+++ b/src/network/core/udp.c	Tue Jan 09 14:48:21 2007 +0000
@@ -116,11 +116,19 @@
 	/* Try to receive anything */
 	nbytes = recvfrom(udp, p.buffer, packet_len, 0, (struct sockaddr *)&client_addr, &client_len);
 
-	/* We got some bytes for the base header of the packet.
-	 * Assume we received the whole packet. */
+	/* We got some bytes for the base header of the packet. */
 	if (nbytes > 2) {
 		NetworkRecv_ReadPacketSize(&p);
 
+		/* If the size does not match the packet must be corrupted.
+		 * Otherwise it will be marked as corrupted later on. */
+		if (nbytes != p.size) {
+			DEBUG(net, 1, "received a packet with mismatching size from %s:%d",
+					inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
+
+			return;
+		}
+
 		/* Put the position on the right place */
 		p.pos = 2;
 		p.next = NULL;