From fe0ba56dc47eea0431d5e5bdbf1f87c8cae2b02e Mon Sep 17 00:00:00 2001 From: Marian Krivos Date: Tue, 31 Jul 2012 05:46:08 +0000 Subject: [PATCH] backport initialisation of _seq member and some static checking for ICMP packet --- Net/include/Poco/Net/ICMPv4PacketImpl.h | 9 ++++++++- Net/src/ICMPv4PacketImpl.cpp | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Net/include/Poco/Net/ICMPv4PacketImpl.h b/Net/include/Poco/Net/ICMPv4PacketImpl.h index 23fef0a9c..dc6db4923 100644 --- a/Net/include/Poco/Net/ICMPv4PacketImpl.h +++ b/Net/include/Poco/Net/ICMPv4PacketImpl.h @@ -43,6 +43,7 @@ #include "Poco/Foundation.h" #include "Poco/Net/Socket.h" #include "Poco/Net/ICMPPacketImpl.h" +#include namespace Poco { @@ -67,6 +68,12 @@ public: Poco::UInt16 seq; }; + // compile-time shield against misalignment + poco_static_assert (offsetof(Header, code) == 0x01); + poco_static_assert (offsetof(Header, checksum) == 0x02); + poco_static_assert (offsetof(Header, id) == 0x04); + poco_static_assert (offsetof(Header, seq) == 0x06); + enum MessageType { ECHO_REPLY, @@ -175,7 +182,7 @@ private: static const std::string REDIRECT_MESSAGE_CODE[REDIRECT_MESSAGE_LENGTH]; static const std::string TIME_EXCEEDED_CODE[TIME_EXCEEDED_LENGTH]; static const std::string PARAMETER_PROBLEM_CODE[PARAMETER_PROBLEM_LENGTH]; - + Poco::UInt16 _seq; }; diff --git a/Net/src/ICMPv4PacketImpl.cpp b/Net/src/ICMPv4PacketImpl.cpp index d74a7936a..8bf129817 100644 --- a/Net/src/ICMPv4PacketImpl.cpp +++ b/Net/src/ICMPv4PacketImpl.cpp @@ -125,8 +125,9 @@ const std::string ICMPv4PacketImpl::PARAMETER_PROBLEM_CODE[] = }; -ICMPv4PacketImpl::ICMPv4PacketImpl(int dataSize): - ICMPPacketImpl(dataSize) +ICMPv4PacketImpl::ICMPv4PacketImpl(int dataSize) + : ICMPPacketImpl(dataSize), + _seq(0) { initPacket(); }