| Index: net/base/dns_util.cc
|
| diff --git a/net/base/dns_util.cc b/net/base/dns_util.cc
|
| index f75cd956663e77123cb90a8614cdba27b667f6f7..9afaf4faec903234bc27c11202169c04d25407a9 100644
|
| --- a/net/base/dns_util.cc
|
| +++ b/net/base/dns_util.cc
|
| @@ -24,14 +24,15 @@ bool DNSDomainFromDot(const base::StringPiece& dotted, std::string* out) {
|
| ch = *buf++;
|
| --n;
|
| if (ch == '.') {
|
| - if (labellen) {
|
| - if (namelen + labellen + 1 > sizeof name)
|
| - return false;
|
| - name[namelen++] = static_cast<char>(labellen);
|
| - memcpy(name + namelen, label, labellen);
|
| - namelen += labellen;
|
| - labellen = 0;
|
| - }
|
| + // Don't allow empty labels per http://crbug.com/456391.
|
| + if (!labellen)
|
| + return false;
|
| + if (namelen + labellen + 1 > sizeof name)
|
| + return false;
|
| + name[namelen++] = static_cast<char>(labellen);
|
| + memcpy(name + namelen, label, labellen);
|
| + namelen += labellen;
|
| + labellen = 0;
|
| continue;
|
| }
|
| if (labellen >= sizeof label)
|
| @@ -39,6 +40,7 @@ bool DNSDomainFromDot(const base::StringPiece& dotted, std::string* out) {
|
| label[labellen++] = ch;
|
| }
|
|
|
| + // Allow empty label at end of name to disable suffix search.
|
| if (labellen) {
|
| if (namelen + labellen + 1 > sizeof name)
|
| return false;
|
|
|