diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -143,7 +143,7 @@ bool NetworkAddress::IsFamily(int family * @note netmask without /n assumes all bits need to match. * @return true if this IP is within the netmask. */ -bool NetworkAddress::IsInNetmask(const char *netmask) +bool NetworkAddress::IsInNetmask(const std::string &netmask) { /* Resolve it if we didn't do it already */ if (!this->IsResolved()) this->GetAddress(); @@ -153,16 +153,15 @@ bool NetworkAddress::IsInNetmask(const c NetworkAddress mask_address; /* Check for CIDR separator */ - const char *chr_cidr = strchr(netmask, '/'); - if (chr_cidr != nullptr) { - int tmp_cidr = atoi(chr_cidr + 1); + auto cidr_separator_location = netmask.find('/'); + if (cidr_separator_location != std::string::npos) { + int tmp_cidr = atoi(netmask.substr(cidr_separator_location + 1).c_str()); /* Invalid CIDR, treat as single host */ if (tmp_cidr > 0 && tmp_cidr < cidr) cidr = tmp_cidr; /* Remove the / so that NetworkAddress works on the IP portion */ - std::string ip_str(netmask, chr_cidr - netmask); - mask_address = NetworkAddress(ip_str.c_str(), 0, this->address.ss_family); + mask_address = NetworkAddress(netmask.substr(0, cidr_separator_location), 0, this->address.ss_family); } else { mask_address = NetworkAddress(netmask, 0, this->address.ss_family); }