From c947a51ecb13cb02a20447445b8a2c4ad0b93848 Mon Sep 17 00:00:00 2001 From: Kevin Gross Date: Mon, 16 Mar 2026 08:24:14 -0300 Subject: [PATCH] fix(Core/IPLocation): Prevent crash when parsing invalid IP (#25095) --- src/common/IPLocation/IPLocation.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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); }