From 25325ae75b24a4e192be0db33af71b3d111002be Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Fri, 18 Nov 2022 17:55:14 +0000 Subject: Avoid using a CIDR range when it only represents a single IP. --- src/socket.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/socket.cpp') diff --git a/src/socket.cpp b/src/socket.cpp index 46be75b70..63e00bc93 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -402,16 +402,19 @@ std::string irc::sockets::cidr_mask::str() const unsigned char* base; size_t len; + unsigned char maxlen; switch (type) { case AF_INET: base = (unsigned char*)&sa.in4.sin_addr; len = 4; + maxlen = 32; break; case AF_INET6: base = (unsigned char*)&sa.in6.sin6_addr; len = 16; + maxlen = 128; break; case AF_UNIX: @@ -425,7 +428,14 @@ std::string irc::sockets::cidr_mask::str() const } memcpy(base, bits, len); - return sa.addr() + "/" + ConvToStr((int)length); + + std::string value = sa.addr(); + if (length < maxlen) + { + value.push_back('/'); + value.append(ConvToStr(static_cast(length))); + } + return value; } bool irc::sockets::cidr_mask::operator==(const cidr_mask& other) const -- cgit v1.3.1-10-gc9f91