diff -Nurd -X.diff_ignore freeciv/common/packets.c freeciv/common/packets.c
--- freeciv/common/packets.c	2012-02-26 21:58:41.000000000 +0200
+++ freeciv/common/packets.c	2012-07-30 00:23:29.000000000 +0300
@@ -339,7 +339,7 @@
 return a NULL packet even if everything is OK (receive_packet_goto_route).
 **************************************************************************/
 void *get_packet_from_connection(struct connection *pc,
-				 enum packet_type *ptype, bool * presult)
+				 enum packet_type *ptype, bool *presult)
 {
   int len_read;
   int whole_packet_len;
@@ -396,6 +396,14 @@
     return NULL;		/* not all data has been read */
   }
 
+  if (whole_packet_len < header_size) {
+    log_verbose("The packet size is reported to be less than header alone. "
+                "The connection will be closed now.");
+    connection_close(pc, _("illegal packet size"));
+
+    return NULL;
+  }
+
 #ifdef USE_COMPRESSION
   if (compressed_packet) {
     uLong compressed_size = whole_packet_len - header_size;
