stop creating icmp packet parts from istream if earlier part failed
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 5 Nov 2014 15:00:20 +0000 (16:00 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 5 Nov 2014 15:00:20 +0000 (16:00 +0100)
src/icmp/icmpv4packet.cpp
src/icmp/icmpv6packet.cpp

index 6a20879..9b52e38 100644 (file)
@@ -247,7 +247,12 @@ istream& operator>>(
         Icmpv4Packet &packet
 )
 {
-    is >> packet.IpHeader >> packet.IcmpPayloadHeader >> packet.IcmpPayloadData;
+    if (is.good())
+        is >> packet.IpHeader;
+    if (is.good())
+        is >> packet.IcmpPayloadHeader;
+    if (is.good())
+        is >> packet.IcmpPayloadData;
 
     return is;
 }
index f45356e..7f78170 100644 (file)
@@ -262,9 +262,17 @@ istream& operator>>(
 {
 #ifdef IPV6_DATA_PRESENT_IN_ISTREAM
     //TODO WHY IPv6 does not come like IPv4????
-    is >> packet.IpHeader >> packet.IcmpPayloadHeader >> packet.IcmpPayloadData;
+    if (is.good())
+        is >> packet.IpHeader;
+    if (is.good())
+        is >> packet.IcmpPayloadHeader;
+    if (is.good())
+        is >> packet.IcmpPayloadData;
 #else
-    is >> packet.IcmpPayloadHeader >> packet.IcmpPayloadData;
+    if (is.good())
+        is >> packet.IcmpPayloadHeader;
+    if (is.good())
+        is >> packet.IcmpPayloadData;
 #endif
 
     return is;