diff --git a/src/common/IPLocation/IPLocation.cpp b/src/common/IPLocation/IPLocation.cpp index ebdc6ec76..9504ec6cb 100644 --- a/src/common/IPLocation/IPLocation.cpp +++ b/src/common/IPLocation/IPLocation.cpp @@ -107,17 +107,24 @@ void IpLocationStore::Load() IpLocationRecord const* IpLocationStore::GetLocationRecord(std::string const& ipAddress) const { - uint32 ip = Acore::Net::address_to_uint(Acore::Net::make_address_v4(ipAddress)); - auto itr = std::upper_bound(_ipLocationStore.begin(), _ipLocationStore.end(), ip, [](uint32 ip, IpLocationRecord const& loc) { return ip < loc.IpTo; }); - if (itr == _ipLocationStore.end()) + uint32 ip; + + try + { + ip = Acore::Net::address_to_uint(Acore::Net::make_address_v4(ipAddress)); + } + catch (boost::system::system_error const&) { return nullptr; } - if (ip < itr->IpFrom) - { + auto itr = std::upper_bound(_ipLocationStore.begin(), _ipLocationStore.end(), ip, [](uint32 ip, IpLocationRecord const& loc) { return ip < loc.IpTo; }); + + if (itr == _ipLocationStore.end()) + return nullptr; + + if (ip < itr->IpFrom) return nullptr; - } return &(*itr); }