diff options
author | jwd@chromium.org <jwd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-31 13:26:50 +0000 |
---|---|---|
committer | jwd@chromium.org <jwd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-31 13:26:50 +0000 |
commit | bb15e07ab1994282115b6f73f275f4097c852b09 (patch) | |
tree | 182d0d29edaf744253999c32e3a5934c4d54b0f3 /chrome/utility | |
parent | db79d6160d79b75ed0d4f9e1d7c180f4e8379978 (diff) | |
download | chromium_src-bb15e07ab1994282115b6f73f275f4097c852b09.zip chromium_src-bb15e07ab1994282115b6f73f275f4097c852b09.tar.gz chromium_src-bb15e07ab1994282115b6f73f275f4097c852b09.tar.bz2 |
Revert 214661 "Bugfix: LocalDomainResolver double-calls its call..."
Reverting because it seems to be causing an ASAN issue on chromeos asan and linux asan bots. Sample output:
==13335==ERROR: AddressSanitizer: global-buffer-overflow on address 0x000013839274 at pc 0xb6218b9 bp 0x7fff0f6cc230 sp 0x7fff0f6cc228
READ of size 53 at 0x000013839274 thread T0
#0 0xb6218b8 in net::MockMDnsSocketFactory::SimulateReceive(char const*, int) /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../net/dns/mock_mdns_socket_factory.cc:92:0
#1 0x5defa8d in local_discovery::(anonymous namespace)::LocalDomainResolverTest_ResolveDomainPreferAFromCache_Test::TestBody() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../chrome/utility/local_discovery/local_domain_resolver_unittest.cc:171:0
#2 0x9d10f67 in testing::Test::Run() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../testing/gtest/src/gtest.cc:2067:0
#3 0x9d131ac in testing::TestInfo::Run() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../testing/gtest/src/gtest.cc:2244:0
#4 0x9d140d2 in testing::TestCase::Run() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../testing/gtest/src/gtest.cc:2351:0
#5 0x9d213b5 in testing::internal::UnitTestImpl::RunAllTests() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../testing/gtest/src/gtest.cc:4177:0
#6 0x9d208bc in impl /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../testing/gtest/src/gtest.cc:2051:0
#7 0x9d208bc in testing::UnitTest::Run() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../testing/gtest/src/gtest.cc:3810:0
#8 0xc293a76 in base::TestSuite::Run() /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../base/test/test_suite.cc:167:0
#9 0xab2a164 in main /mnt/data/b/build/slave/Linux_Chromium_OS_ASAN_Builder/build/src/out/Release/../../chrome/test/base/run_all_unittests.cc:9:0
#10 0x7f3e7254376c in __libc_start_main /build/buildd/eglibc-2.15/csu/libc-start.c:226
#11 0x493d1c in _start ??:0
0x000013839274 is located 44 bytes to the left of global variable '.str11' from '../../chrome/utility/local_discovery/local_domain_resolver_unittest.cc' (0x138392a0) of size 14
'.str11' is ascii string 'myhello.local'
0x000013839274 is located 11 bytes to the right of global variable 'local_discovery::(anonymous namespace)::kSamplePacketA' from '../../chrome/utility/local_discovery/local_domain_resolver_unittest.cc' (0x13839240) of size 41
Shadow bytes around the buggy address:
0x0000826ff1f0: 00 00 f9 f9 f9 f9 f9 f9 01 f9 f9 f9 f9 f9 f9 f9
0x0000826ff200: 00 00 00 00 00 02 f9 f9 f9 f9 f9 f9 00 00 00 00
0x0000826ff210: 00 00 00 00 00 00 00 00 00 00 00 f9 f9 f9 f9 f9
0x0000826ff220: 00 07 f9 f9 f9 f9 f9 f9 00 00 02 f9 f9 f9 f9 f9
0x0000826ff230: 00 00 01 f9 f9 f9 f9 f9 00 00 02 f9 f9 f9 f9 f9
=>0x0000826ff240: 00 00 00 06 f9 f9 f9 f9 00 00 00 00 00 01[f9]f9
0x0000826ff250: f9 f9 f9 f9 00 06 f9 f9 f9 f9 f9 f9 00 f9 f9 f9
0x0000826ff260: f9 f9 f9 f9 00 00 00 00 00 00 00 00 07 f9 f9 f9
0x0000826ff270: f9 f9 f9 f9 06 f9 f9 f9 f9 f9 f9 f9 00 00 00 00
0x0000826ff280: 00 01 f9 f9 f9 f9 f9 f9 00 00 00 00 00 00 00 f9
0x0000826ff290: f9 f9 f9 f9 00 00 00 06 f9 f9 f9 f9 00 00 03 f9
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
ASan internal: fe
==13335==ABORTING
Failed tests:
LocalDomainResolverTest.ResolveDomainPreferAFromCache
> Bugfix: LocalDomainResolver double-calls its callback
>
> LocalDomainResolver double-callback if both A and AAAA records are
> present. Fix to check if callback has been called before starting the second
> transaction.
>
> BUG=
>
> Review URL: https://chromiumcodereview.appspot.com/21014008
TBR=noamsml@chromium.org
Review URL: https://codereview.chromium.org/21070003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214704 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/utility')
-rw-r--r-- | chrome/utility/local_discovery/local_domain_resolver_unittest.cc | 16 | ||||
-rw-r--r-- | chrome/utility/local_discovery/service_discovery_client_impl.cc | 17 |
2 files changed, 5 insertions, 28 deletions
diff --git a/chrome/utility/local_discovery/local_domain_resolver_unittest.cc b/chrome/utility/local_discovery/local_domain_resolver_unittest.cc index fe1cebf..c1fd51c 100644 --- a/chrome/utility/local_discovery/local_domain_resolver_unittest.cc +++ b/chrome/utility/local_discovery/local_domain_resolver_unittest.cc @@ -167,22 +167,6 @@ TEST_F(LocalDomainResolverTest, ResolveDomainNone) { RunFor(base::TimeDelta::FromSeconds(4)); } -TEST_F(LocalDomainResolverTest, ResolveDomainPreferAFromCache) { - socket_factory_->SimulateReceive( - kSamplePacketA, sizeof(kSamplePacketAAAA)); - socket_factory_->SimulateReceive( - kSamplePacketA, sizeof(kSamplePacketA)); - - LocalDomainResolverImpl resolver( - "myhello.local", net::ADDRESS_FAMILY_UNSPECIFIED, - base::Bind(&LocalDomainResolverTest::AddressCallback, - base::Unretained(this)), &mdns_client_); - - EXPECT_CALL(*this, AddressCallbackInternal(true, "1.2.3.4")); - - resolver.Start(); -} - } // namespace } // namespace local_discovery diff --git a/chrome/utility/local_discovery/service_discovery_client_impl.cc b/chrome/utility/local_discovery/service_discovery_client_impl.cc index 1df586d..524f176 100644 --- a/chrome/utility/local_discovery/service_discovery_client_impl.cc +++ b/chrome/utility/local_discovery/service_discovery_client_impl.cc @@ -406,14 +406,10 @@ void LocalDomainResolverImpl::Start() { transaction_a_->Start(); } - // Callback may have finished syncrhonously during |transaction_a_->Start()|, - // check to make sure it hasn't before starting |transaction_aaaa_|. - if (!callback_.is_null()) { - if (address_family_ == net::ADDRESS_FAMILY_IPV6 || - address_family_ == net::ADDRESS_FAMILY_UNSPECIFIED) { - transaction_aaaa_ = CreateTransaction(net::dns_protocol::kTypeAAAA); - transaction_aaaa_->Start(); - } + if (address_family_ == net::ADDRESS_FAMILY_IPV6 || + address_family_ == net::ADDRESS_FAMILY_UNSPECIFIED) { + transaction_aaaa_ = CreateTransaction(net::dns_protocol::kTypeAAAA); + transaction_aaaa_->Start(); } } @@ -453,10 +449,7 @@ void LocalDomainResolverImpl::OnTransactionComplete( } } - if (!callback_.is_null()) { - callback_.Run(result == net::MDnsTransaction::RESULT_RECORD, address); - callback_.Reset(); - } + callback_.Run(result == net::MDnsTransaction::RESULT_RECORD, address); } } // namespace local_discovery |