footcannon prevention: check for invalid address family.

throw if we pass in a bogus af value when getting a sockaddr for all interfaces
pull/1905/head
Jeff 2 years ago
parent 98b3860655
commit 33a2226079
No known key found for this signature in database
GPG Key ID: 025C02EE3A092F2D

@ -591,11 +591,15 @@ namespace llarp
addr.sin_port = htons(0);
return SockAddr{addr};
}
sockaddr_in6 addr6{};
addr6.sin6_family = AF_INET6;
addr6.sin6_port = htons(0);
addr6.sin6_addr = IN6ADDR_ANY_INIT;
return SockAddr{addr6};
if (af == AF_INET6)
{
sockaddr_in6 addr6{};
addr6.sin6_family = AF_INET6;
addr6.sin6_port = htons(0);
addr6.sin6_addr = IN6ADDR_ANY_INIT;
return SockAddr{addr6};
}
throw llarp::make_exception<std::invalid_argument>(af, " is not a valid address family");
}
} // namespace

@ -35,6 +35,17 @@ namespace llarp
return o.str();
}
/// util for constructing an exception with a message constructed from a set of whatever passed
/// into stringify
/// E must be derived from std::exception here
template <typename E, typename... T>
E
make_exception(T&&... stuff)
{
static_assert(std::is_base_of_v<std::exception, E>);
return E{stringify(std::forward<T>(stuff)...)};
}
using namespace std::literals;
/// Returns true if the first string is equal to the second string, compared case-insensitively.

Loading…
Cancel
Save