summaryrefslogtreecommitdiff
path: root/modules/m_dns.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-05-08 09:50:43 -0400
committerAdam <Adam@anope.org>2013-05-08 09:50:43 -0400
commit9b07e163c0e1ceed30e72aead2338b47ef2da1b2 (patch)
tree4c13bd545846700a58c5526c3e4e9a6fdf0afc87 /modules/m_dns.cpp
parent6859decfb8ed0430e946ff81eca4f9da879f69c9 (diff)
Make sockaddrs/cidr not throw on invalid ips to give us an easier/cheaper way to test for a valid IP
Diffstat (limited to 'modules/m_dns.cpp')
-rw-r--r--modules/m_dns.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/modules/m_dns.cpp b/modules/m_dns.cpp
index 9b0157069..ea64da92f 100644
--- a/modules/m_dns.cpp
+++ b/modules/m_dns.cpp
@@ -151,6 +151,8 @@ class Packet : public Query
sockaddrs addrs;
addrs.ntop(AF_INET, &a);
+ if (!addrs.valid())
+ throw SocketException("Invalid IP");
record.rdata = addrs.addr();
break;
@@ -167,6 +169,8 @@ class Packet : public Query
sockaddrs addrs;
addrs.ntop(AF_INET6, &a);
+ if (!addrs.valid())
+ throw SocketException("Invalid IP");
record.rdata = addrs.addr();
break;
@@ -272,6 +276,8 @@ class Packet : public Query
if (q.type == QUERY_PTR)
{
sockaddrs ip(q.name);
+ if (!ip.valid())
+ throw SocketException("Invalid IP");
if (q.name.find(':') != Anope::string::npos)
{
@@ -347,6 +353,8 @@ class Packet : public Query
throw SocketException("Unable to pack packet");
sockaddrs a(rr.rdata);
+ if (!a.valid())
+ throw SocketException("Invalid IP");
s = htons(4);
memcpy(&output[pos], &s, 2);
@@ -362,6 +370,8 @@ class Packet : public Query
throw SocketException("Unable to pack packet");
sockaddrs a(rr.rdata);
+ if (!a.valid())
+ throw SocketException("Invalid IP");
s = htons(16);
memcpy(&output[pos], &s, 2);