From c56088d21ae0d68866338dcd16111e9f0bfedb88 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Tue, 23 Oct 2018 09:13:28 +0000 Subject: [PATCH] fixed a bug in qse_dhcp6_find_option() renamed SocketAddress::setIpaddr to setIp6addr/setIp4addr --- qse/include/qse/si/SocketAddress.hpp | 6 +++--- qse/lib/dhcp/dhcp6msg.c | 9 ++++++++- qse/lib/si/SocketAddress.cpp | 6 +++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/qse/include/qse/si/SocketAddress.hpp b/qse/include/qse/si/SocketAddress.hpp index 5f748e41..d4d3e3e4 100644 --- a/qse/include/qse/si/SocketAddress.hpp +++ b/qse/include/qse/si/SocketAddress.hpp @@ -64,9 +64,9 @@ public: return QSE_SIZEOF(this->skad); } - void setIpaddr (const qse_ip4ad_t* ipaddr) QSE_CPP_NOEXCEPT; - void setIpaddr (const qse_ip6ad_t* ipaddr) QSE_CPP_NOEXCEPT; - void setIpaddr (qse_uint32_t ipaddr) QSE_CPP_NOEXCEPT; + void setIp4addr (qse_uint32_t ipaddr) QSE_CPP_NOEXCEPT; + void setIp4addr (const qse_ip4ad_t* ipaddr) QSE_CPP_NOEXCEPT; + void setIp6addr (const qse_ip6ad_t* ipaddr) QSE_CPP_NOEXCEPT; const qse_ip4ad_t* getIp4addr () const QSE_CPP_NOEXCEPT; const qse_ip6ad_t* getIp6addr () const QSE_CPP_NOEXCEPT; diff --git a/qse/lib/dhcp/dhcp6msg.c b/qse/lib/dhcp/dhcp6msg.c index 22e1ebc6..6f2ea88b 100644 --- a/qse/lib/dhcp/dhcp6msg.c +++ b/qse/lib/dhcp/dhcp6msg.c @@ -23,8 +23,15 @@ qse_dhcp6_opt_hdr_t* qse_dhcp6_find_option (const qse_dhcp6_pktinf_t* pkt, int c while (rem >= QSE_SIZEOF(qse_dhcp6_opt_hdr_t)) { - if (qse_ntoh16(opt->code) == code) return opt; + if (qse_ntoh16(opt->code) == code) + { + if (rem - QSE_SIZEOF(qse_dhcp6_opt_hdr_t) < qse_ntoh16(opt->len)) return QSE_NULL; /* probably the packet is ill-formed */ + return opt; + } + rem -= QSE_SIZEOF(qse_dhcp6_opt_hdr_t) + qse_ntoh16(opt->len); + opt = (qse_dhcp6_opt_hdr_t*)((qse_uint8_t*)(opt + 1) + qse_ntoh16(opt->len)); + } return QSE_NULL; diff --git a/qse/lib/si/SocketAddress.cpp b/qse/lib/si/SocketAddress.cpp index 67936f38..4c3dcacb 100644 --- a/qse/lib/si/SocketAddress.cpp +++ b/qse/lib/si/SocketAddress.cpp @@ -108,7 +108,7 @@ int SocketAddress::getFamily () const QSE_CPP_NOEXCEPT //return qse_skadfamily (&this->skad); } -void SocketAddress::setIpaddr (const qse_ip4ad_t* ipaddr) QSE_CPP_NOEXCEPT +void SocketAddress::setIp4addr (const qse_ip4ad_t* ipaddr) QSE_CPP_NOEXCEPT { #if defined(AF_INET) if (FAMILY(&this->skad) == AF_INET) @@ -119,7 +119,7 @@ void SocketAddress::setIpaddr (const qse_ip4ad_t* ipaddr) QSE_CPP_NOEXCEPT #endif } -void SocketAddress::setIpaddr (const qse_uint32_t ipaddr) QSE_CPP_NOEXCEPT +void SocketAddress::setIp4addr (const qse_uint32_t ipaddr) QSE_CPP_NOEXCEPT { #if defined(AF_INET) if (FAMILY(&this->skad) == AF_INET) @@ -130,7 +130,7 @@ void SocketAddress::setIpaddr (const qse_uint32_t ipaddr) QSE_CPP_NOEXCEPT #endif } -void SocketAddress::setIpaddr (const qse_ip6ad_t* ipaddr) QSE_CPP_NOEXCEPT +void SocketAddress::setIp6addr (const qse_ip6ad_t* ipaddr) QSE_CPP_NOEXCEPT { #if defined(AF_INET6) if (FAMILY(&this->skad) == AF_INET6)