diff options
author | Cronet Mainline Eng <cronet-mainline-eng+copybara@google.com> | 2023-04-17 14:36:25 -0800 |
---|---|---|
committer | Patrick Rohr <prohr@google.com> | 2023-04-17 15:41:30 -0700 |
commit | 41cb724250484f326b0bbd5f8b955eb37b3b83c6 (patch) | |
tree | cb7b2cbe08b2c5305a56b31649359f8141edd198 /net/base/ip_address.cc | |
parent | c175721cfcc03e339122be17d569239df9762b2b (diff) | |
download | cronet-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.cc | 33 |
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) |