From f238612c6f3d562bdf190a49d2d0bfb60f34bca5 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Wed, 5 Nov 2014 16:00:20 +0100 Subject: [PATCH] stop creating icmp packet parts from istream if earlier part failed --- src/icmp/icmpv4packet.cpp | 7 ++++++- src/icmp/icmpv6packet.cpp | 12 ++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/icmp/icmpv4packet.cpp b/src/icmp/icmpv4packet.cpp index 6a20879..9b52e38 100644 --- a/src/icmp/icmpv4packet.cpp +++ b/src/icmp/icmpv4packet.cpp @@ -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; } diff --git a/src/icmp/icmpv6packet.cpp b/src/icmp/icmpv6packet.cpp index f45356e..7f78170 100644 --- a/src/icmp/icmpv6packet.cpp +++ b/src/icmp/icmpv6packet.cpp @@ -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; -- 1.7.1