summaryrefslogtreecommitdiffstats
path: root/net/dns
diff options
context:
space:
mode:
authorszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-11 02:10:47 +0000
committerszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-11 02:10:47 +0000
commit207aadd5d4f5aa835701dea0149236680691a174 (patch)
treed8f6fef3901e86bc5d6def261605fa2e00384433 /net/dns
parent17df2977c31fde6d0330c14cfdbc98a75b5deb04 (diff)
downloadchromium_src-207aadd5d4f5aa835701dea0149236680691a174.zip
chromium_src-207aadd5d4f5aa835701dea0149236680691a174.tar.gz
chromium_src-207aadd5d4f5aa835701dea0149236680691a174.tar.bz2
[net/dns] Initialize res_state in DnsConfigServicePosix.
If there is no domain or search in /etc/resolv.conf res_ninit() will return 0 ("no error") and set RES_INIT but it will not reset res.dnsearch. Adding a memset to prevent non-UTF8 garbled domain suffixes from crashing the NetLog. BUG=115506 TEST=chrome --enable-async-dns # on Linux, and restart network Review URL: http://codereview.chromium.org/9663048 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126058 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns')
-rw-r--r--net/dns/dns_config_service_posix.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc
index 67df4e9..681405f 100644
--- a/net/dns/dns_config_service_posix.cc
+++ b/net/dns/dns_config_service_posix.cc
@@ -33,25 +33,27 @@ class DnsConfigServicePosix::ConfigReader : public SerialWorker {
success_ = false;
#if defined(OS_ANDROID)
NOTIMPLEMENTED();
-#else
-#if defined(OS_OPENBSD)
+#elif defined(OS_OPENBSD)
// Note: res_ninit in glibc always returns 0 and sets RES_INIT.
// res_init behaves the same way.
+ memset(&_res, 0, sizeof(_res));
if ((res_init() == 0) && (_res.options & RES_INIT)) {
success_ = ConvertResStateToDnsConfig(_res, &dns_config_);
}
-#else
+#else // all other OS_POSIX
struct __res_state res;
+ memset(&res, 0, sizeof(res));
if ((res_ninit(&res) == 0) && (res.options & RES_INIT)) {
success_ = ConvertResStateToDnsConfig(res, &dns_config_);
}
-#endif
+ // Prefer res_ndestroy where available.
#if defined(OS_MACOSX)
res_ndestroy(&res);
-#elif !defined(OS_OPENBSD)
+#else
res_nclose(&res);
#endif
-#endif // defined(OS_ANDROID)
+
+#endif
}
void OnWorkFinished() OVERRIDE {