Added defense in depth mechanism to host resolver to prevent long hostnames from getting into glibc's getaddrinfo.

BUG=50383
TEST=HostResolverImplTest.LongHost
Review URL: http://codereview.chromium.org/3052044

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55319 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/base/host_resolver_proc.cc b/net/base/host_resolver_proc.cc
index 39d4fc4..9ae40208e 100644
--- a/net/base/host_resolver_proc.cc
+++ b/net/base/host_resolver_proc.cc
@@ -83,6 +83,8 @@
                            HostResolverFlags host_resolver_flags,
                            AddressList* addrlist,
                            int* os_error) {
+  static const size_t kMaxHostLength = 4096;
+
   if (os_error)
     *os_error = 0;
 
@@ -92,6 +94,11 @@
   if (host.empty())
     return ERR_NAME_NOT_RESOLVED;
 
+  // Limit the size of hostnames that will be resolved to combat issues in some
+  // platform's resolvers.
+  if (host.size() > kMaxHostLength)
+    return ERR_NAME_NOT_RESOLVED;
+
   struct addrinfo* ai = NULL;
   struct addrinfo hints = {0};