Shifting more than the size of the integer is undefined.
authorDavid Barksdale <amatus.amongus@gmail.com>
Sun, 31 Oct 2010 01:46:15 +0000 (01:46 +0000)
committerDavid Barksdale <amatus.amongus@gmail.com>
Sun, 31 Oct 2010 01:46:15 +0000 (01:46 +0000)
src/core/gnunet-service-core.c

index 4ff73395c865cfce748405ebbe30f158dd91c631..5e71ef8976971d53a7262e48d0ac68c4683972d3 100644 (file)
@@ -3511,7 +3511,11 @@ handle_encrypted_message (struct Neighbour *n,
     }
   if (n->last_sequence_number_received < snum)
     {
-      n->last_packets_bitmap <<= (snum - n->last_sequence_number_received);
+      int shift = (snum - n->last_sequence_number_received);
+      if (shift >= 8 * sizeof(n->last_packets_bitmap))
+        n->last_packets_bitmap = 0;
+      else
+        n->last_packets_bitmap <<= shift;
       n->last_sequence_number_received = snum;
     }