summaryrefslogtreecommitdiff
path: root/net/base/ip_address.cc
diff options
context:
space:
mode:
authorCronet Mainline Eng <cronet-mainline-eng+copybara@google.com>2023-04-17 14:36:25 -0800
committerPatrick Rohr <prohr@google.com>2023-04-17 15:41:30 -0700
commit41cb724250484f326b0bbd5f8b955eb37b3b83c6 (patch)
treecb7b2cbe08b2c5305a56b31649359f8141edd198 /net/base/ip_address.cc
parentc175721cfcc03e339122be17d569239df9762b2b (diff)
downloadcronet-41cb724250484f326b0bbd5f8b955eb37b3b83c6.tar.gz
Import Cronet version 114.0.5709.3
Project import generated by Copybara. FolderOrigin-RevId: /tmp/copybara-origin/src Test: none Change-Id: I263aa6b692a17ac2471b98b6e662b26dd1327c9c
Diffstat (limited to 'net/base/ip_address.cc')
-rw-r--r--net/base/ip_address.cc33
1 files changed, 27 insertions, 6 deletions
diff --git a/net/base/ip_address.cc b/net/base/ip_address.cc
index e8beeffa0..45a915c19 100644
--- a/net/base/ip_address.cc
+++ b/net/base/ip_address.cc
@@ -9,6 +9,9 @@
#include "base/check_op.h"
#include "base/containers/stack_container.h"
+#include "base/debug/alias.h"
+#include "base/debug/crash_logging.h"
+#include "base/logging.h"
#include "base/notreached.h"
#include "base/ranges/algorithm.h"
#include "base/strings/strcat.h"
@@ -178,14 +181,21 @@ size_t IPAddressBytes::EstimateMemoryUsage() const {
// static
absl::optional<IPAddress> IPAddress::FromValue(const base::Value& value) {
- if (!value.is_string())
+ if (!value.is_string()) {
return absl::nullopt;
+ }
+
+ return IPAddress::FromIPLiteral(value.GetString());
+}
+// static
+absl::optional<IPAddress> IPAddress::FromIPLiteral(
+ base::StringPiece ip_literal) {
IPAddress address;
- bool success = address.AssignFromIPLiteral(value.GetString());
- if (!success || !address.IsValid())
+ if (!address.AssignFromIPLiteral(ip_literal)) {
return absl::nullopt;
-
+ }
+ DCHECK(address.IsValid());
return address;
}
@@ -409,7 +419,17 @@ std::string IPAddressToPackedString(const IPAddress& address) {
}
IPAddress ConvertIPv4ToIPv4MappedIPv6(const IPAddress& address) {
- DCHECK(address.IsIPv4());
+ // TODO(https://crbug.com/1414007): Remove crash key and use DCHECK() when
+ // the cause is identified.
+ if (!address.IsIPv4()) {
+ static base::debug::CrashKeyString* crash_key =
+ base::debug::AllocateCrashKeyString("ipaddress",
+ base::debug::CrashKeySize::Size64);
+ base::debug::ScopedCrashKeyString addr(crash_key, address.ToString());
+ bool is_valid = address.IsValid();
+ base::debug::Alias(&is_valid);
+ LOG(FATAL) << "expected an IPv4 address but got " << address.ToString();
+ }
// IPv4-mapped addresses are formed by:
// <80 bits of zeros> + <16 bits of ones> + <32-bit IPv4 address>.
base::StackVector<uint8_t, 16> bytes;
@@ -473,8 +493,9 @@ bool ParseCIDRBlock(base::StringPiece cidr_literal,
// Parse the prefix length.
uint32_t number_of_bits;
- if (!ParseUint32(parts[1], &number_of_bits))
+ if (!ParseUint32(parts[1], ParseIntFormat::NON_NEGATIVE, &number_of_bits)) {
return false;
+ }
// Make sure the prefix length is in a valid range.
if (number_of_bits > ip_address->size() * 8)