diff options
author | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-11 02:10:47 +0000 |
---|---|---|
committer | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-11 02:10:47 +0000 |
commit | 207aadd5d4f5aa835701dea0149236680691a174 (patch) | |
tree | d8f6fef3901e86bc5d6def261605fa2e00384433 /net/dns | |
parent | 17df2977c31fde6d0330c14cfdbc98a75b5deb04 (diff) | |
download | chromium_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.cc | 14 |
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 { |