fixed bug in reading of checksum (which was found using the unittests -- great thing!)
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 12 Mar 2015 17:02:30 +0000 (18:02 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 12 Mar 2015 17:02:30 +0000 (18:02 +0100)
src/icmp/icmpheader.cpp

index b2e1346..d8df8c7 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include "icmp/icmpheader.h"
+#include <sstream>
 #include <boost/scoped_array.hpp>
 
 std::istream& IcmpHeader::read(std::istream &is)
@@ -29,8 +30,10 @@ std::istream& IcmpHeader::read(std::istream &is)
     is.read(buf.get(), 4);
     type = static_cast<uint8_t>(buf[0]);
     code = static_cast<uint8_t>(buf[1]);
-    checksum = ( static_cast<uint16_t>(buf[2]) << 8 )
-               + static_cast<uint16_t>(buf[3]);
+    uint8_t checksum_msb = static_cast<uint8_t>(buf[2]);
+    uint8_t checksum_lsb = static_cast<uint8_t>(buf[3]);
+    checksum = ( static_cast<uint16_t>(checksum_msb) << 8 )
+               + static_cast<uint16_t>(checksum_lsb);
 
     return is;
 }