X-Git-Url: http://g0dil.de/git?p=senf.git;a=blobdiff_plain;f=senf%2FSocket%2FProtocols%2FINet%2FINet6Address.cci;fp=senf%2FSocket%2FProtocols%2FINet%2FINet6Address.cci;h=3c2ac1435f167ee4405a3ae043a00b5251994a4f;hp=4e3d7f7f6b5e00c17f54386d3e1ceabdf023e83b;hb=b2fff1b50e0010fdad28cb638987cbf88032e30e;hpb=c305d6b970e5952fe006270c7184b8bbb10ba2ee diff --git a/senf/Socket/Protocols/INet/INet6Address.cci b/senf/Socket/Protocols/INet/INet6Address.cci index 4e3d7f7..3c2ac14 100644 --- a/senf/Socket/Protocols/INet/INet6Address.cci +++ b/senf/Socket/Protocols/INet/INet6Address.cci @@ -214,7 +214,8 @@ prefix_ senf::INet6Network::INet6Network() {} prefix_ senf::INet6Network::INet6Network(INet6Address const & address, unsigned prefix_len) - : prefix_len_(prefix_len), address_(address) + : prefix_len_( prefix_len_checked(prefix_len)), + address_(address) { using boost::lambda::_1; using boost::lambda::_2; @@ -282,6 +283,15 @@ prefix_ senf::INet6Network senf::INet6Network::subnet(boost::uint64_t net, unsig return INet6Network(addr, prefix_len); } +prefix_ unsigned senf::INet6Network::prefix_len_checked(unsigned prefix_len) + const +{ + if (prefix_len > 128) + throw AddressSyntaxException("invalid INet6 prefix length: " + + boost::lexical_cast(prefix_len)); + return prefix_len; +} + prefix_ std::ostream & senf::operator<<(std::ostream & os, INet6Network const & addr) { os << addr.address() << '/' << addr.prefix_len();