| Index: net/proxy/proxy_bypass_rules.cc
|
| diff --git a/net/proxy/proxy_bypass_rules.cc b/net/proxy/proxy_bypass_rules.cc
|
| index 6bf1c6157e560e3fa72b1df152affcb037f962a7..239a2fe30c5f0c482f34a546aadeebcb397a11d8 100644
|
| --- a/net/proxy/proxy_bypass_rules.cc
|
| +++ b/net/proxy/proxy_bypass_rules.cc
|
| @@ -6,10 +6,11 @@
|
|
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/strings/stringprintf.h"
|
| #include "base/strings/string_piece.h"
|
| #include "base/strings/string_tokenizer.h"
|
| +#include "base/strings/string_util.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "net/base/host_port_pair.h"
|
| #include "net/base/net_util.h"
|
|
|
| namespace net {
|
| @@ -131,6 +132,7 @@ class BypassIPBlockRule : public ProxyBypassRules::Rule {
|
| };
|
|
|
| // Returns true if the given string represents an IP address.
|
| +// IPv6 addresses are expected to be bracketed.
|
| bool IsIPAddress(const std::string& domain) {
|
| // From GURL::HostIsIPAddress()
|
| url::RawCanonOutputT<char, 128> ignored_output;
|
| @@ -305,9 +307,12 @@ bool ProxyBypassRules::AddRuleFromStringInternal(
|
| std::string host;
|
| int port;
|
| if (ParseHostAndPort(raw, &host, &port)) {
|
| - if (IsIPAddress(host)) {
|
| + // Note that HostPortPair is used to merely to convert any IPv6 literals to
|
| + // a URL-safe format that can be used by canonicalization below.
|
| + std::string bracketed_host = HostPortPair(host, 80).HostForURL();
|
| + if (IsIPAddress(bracketed_host)) {
|
| // Canonicalize the IP literal before adding it as a string pattern.
|
| - GURL tmp_url("http://" + host);
|
| + GURL tmp_url("http://" + bracketed_host);
|
| return AddRuleForHostname(scheme, tmp_url.host(), port);
|
| }
|
| }
|
|
|