diff -Nurd -X.diff_ignore freeciv/common/packets.c freeciv/common/packets.c
--- freeciv/common/packets.c	2012-02-26 23:36:05.000000000 +0200
+++ freeciv/common/packets.c	2012-07-30 00:41:22.000000000 +0300
@@ -308,7 +308,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;
@@ -361,6 +361,17 @@
     return NULL;		/* not all data has been read */
   }
 
+  if (whole_packet_len < header_size) {
+    CLOSE_FUN close_callback = close_socket_get_callback();
+
+    freelog(LOG_ERROR, "The packet size is reported to be less than "
+            "header alone. The connection will be closed now.");
+    assert(close_callback);
+    (*close_callback) (pc);
+
+    return NULL;
+  }
+
 #ifdef USE_COMPRESSION
   if (compressed_packet) {
     uLong compressed_size = whole_packet_len - header_size;
