IMPORTANT DEBUGGING NOTE: batches of tests are run inside their own process. For debugging a test inside a debugger, use the --gtest_filter= flag along with --single-process-tests. Using sharding settings from environment. This is shard 0/1 Using 1 parallel jobs. Note: Google Test filter = StarboardRendererTest.POC_DoubleInitializeLeavesDanglingSbPlayer_UAF [==========] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from StarboardRendererTest [ RUN ] StarboardRendererTest.POC_DoubleInitializeLeavesDanglingSbPlayer_UAF [27040:27040:INFO:chromecast/starboard/media/cdm/starboard_drm_wrapper.cc:555] Overriding StarboardDrmWrapper singleton for testing [27040:27040:INFO:chromecast/starboard/media/cdm/starboard_drm_wrapper.cc:469] Created DRM system with address 0x7db3319f54e4 [27040:27040:INFO:chromecast/starboard/media/renderer/starboard_renderer.cc:40] Constructed StarboardRenderer. Buffering is enabled [27040:27040:INFO:chromecast/starboard/media/renderer/starboard_player_manager.cc:56] Initial audio config: codec: aac, profile: unknown, bytes_per_channel: 4, channel_layout: STEREO, channels: 2, samples_per_second: 48000, sample_format: Signed 32-bit, bytes_per_frame: 8, seek_preroll: 0us, codec_delay: 0, has extra data: false, encryption scheme: Unencrypted, discard decoder delay: true, target_output_channel_layout: NONE, target_output_sample_format: Unknown sample format [27040:27040:INFO:chromecast/starboard/media/renderer/chromium_starboard_conversions.cc:153] Video config has no HDR metadata. [27040:27040:INFO:chromecast/starboard/media/renderer/starboard_player_manager.cc:77] Initial video config: codec: h264, profile: h264 high, level: 42, alpha_mode: is_opaque, coded size: [3840,2160], visible rect: [0,0,3838,2121], natural size: [1920,1080], has extra data: false, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED} [27040:27040:INFO:chromecast/starboard/media/renderer/starboard_player_manager.cc:115] Content is not encrypted and no CDM exists. Passing a null SbDrmSystem to SbPlayerCreate [27040:27040:INFO:chromecast/starboard/media/renderer/demuxer_stream_reader.cc:122] Initial resolution: 3840x2160 [27040:27040:INFO:chromecast/starboard/media/renderer/geometry_change_handler.cc:26] Setting SbPlayer's bounds to z=0, x=0, y=0, width=800, height=600 GMOCK WARNING: Uninteresting mock function call - returning directly. Function call: Call(PIPELINE_OK) NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/main/docs/gmock_cook_book.md#knowing-when-to-expect-useoncall for details. [27040:27040:ERROR:chromecast/starboard/media/renderer/starboard_renderer.cc:69] Unable to create StarboardPlayerManager [27040:27040:INFO:chromecast/starboard/media/renderer/geometry_change_handler.cc:26] Setting SbPlayer's bounds to z=0, x=100, y=200, width=300, height=400 ================================================================= ==27040==ERROR: AddressSanitizer: heap-use-after-free on address 0x7b93319e4d90 at pc 0x55f86f14a01c bp 0x7fff9913b6d0 sp 0x7fff9913b6c8 WRITE of size 4 at 0x7b93319e4d90 thread T0 #0 0x55f86f14a01b in void std::__Cr::__function::__policy_func::__call_func(std::__Cr::__function::__policy_storage const*, void*, int, int, int, int, int) chromecast/starboard/media/renderer/starboard_renderer_test.cc:726:36 #1 0x55f86f094d1d in decltype(std::forward const&>(fp)(std::get<0ul>(std::forward>(fp0)), std::get<1ul>(std::forward>(fp0)), std::get<2ul>(std::forward>(fp0)), std::get<3ul>(std::forward>(fp0)), std::get<4ul>(std::forward>(fp0)), std::get<5ul>(std::forward>(fp0)))) testing::internal::ApplyImpl const&, std::__Cr::tuple, 0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::__Cr::function const&, std::__Cr::tuple&&, std::__Cr::integer_sequence) gen/third_party/libc++/src/include/__functional/function.h:502:12 #2 0x55f86f09444d in testing::Action::Perform(std::__Cr::tuple) const third_party/googletest/src/googlemock/include/gmock/internal/gmock-internal-utils.h:437:10 #3 0x55f86f093c20 in testing::internal::FunctionMocker::PerformDefaultAction(std::__Cr::tuple&&, std::__Cr::basic_string, std::__Cr::allocator> const&) const third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1501:32 #4 0x55f86f093a76 in testing::internal::FunctionMocker::InvokeWith(std::__Cr::tuple&&) third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1822:20 #5 0x55f86f0932d9 in testing::internal::FunctionMocker::Invoke(void*, int, int, int, int, int) third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1548:12 #6 0x55f86f1641ee in chromecast::media::(anonymous namespace)::SetPlayerBounds(gfx::RectF const&, chromecast::media::StarboardApiWrapper*, void*) chromecast/starboard/media/renderer/geometry_change_handler.cc:29:14 #7 0x55f86f18a782 in chromecast::media::mojom::VideoGeometryChangeClientStubDispatch::Accept(chromecast::media::mojom::VideoGeometryChangeClient*, mojo::Message*) gen/chromecast/media/service/mojom/video_geometry_setter.mojom.cc:203:13 #8 0x55f871a5e748 in mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:1085:54 #9 0x55f871a756a3 in mojo::MessageDispatcher::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/message_dispatcher.cc:44:19 #10 0x55f871a62934 in mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:747:20 #11 0x55f871a7cd8c in mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::internal::MultiplexRouter::MessageWrapper*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*) mojo/public/cpp/bindings/lib/multiplex_router.cc:1204:42 #12 0x55f871a7bf21 in mojo::internal::MultiplexRouter::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/multiplex_router.cc:790:7 #13 0x55f871a756a3 in mojo::MessageDispatcher::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/message_dispatcher.cc:44:19 #14 0x55f871a54701 in mojo::Connector::DispatchMessage(mojo::ScopedHandleBase) mojo/public/cpp/bindings/lib/connector.cc:567:49 #15 0x55f871a557df in mojo::Connector::ReadAllAvailableMessages() mojo/public/cpp/bindings/lib/connector.cc:628:14 #16 0x55f871a5540d in mojo::Connector::OnWatcherHandleReady(char const*, unsigned int) mojo/public/cpp/bindings/lib/connector.cc:419:3 #17 0x55f871a5788a in void base::internal::Invoker, base::internal::BindState, base::internal::UnretainedWrapper>, void (unsigned int)>::RunImpl, base::internal::UnretainedWrapper> const&, 0ul, 1ul>(void (mojo::Connector::* const&)(char const*, unsigned int), std::__Cr::tuple, base::internal::UnretainedWrapper> const&, std::__Cr::integer_sequence, unsigned int&&) base/functional/bind_internal.h:1069:14 #18 0x55f871a57725 in base::internal::Invoker, base::internal::BindState, base::internal::UnretainedWrapper>, void (unsigned int)>::Run(base::internal::BindStateBase*, unsigned int) base/functional/bind_internal.h:989:12 #19 0x55f87139da5e in base::RepeatingCallback::Run(unsigned int) const & base/functional/callback.h:346:12 #20 0x55f87139d798 in void base::internal::Invoker const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback const&>, base::internal::BindState const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback>, void (unsigned int, mojo::HandleSignalsState const&)>::RunImpl const&, unsigned int, mojo::HandleSignalsState const&), std::__Cr::tuple> const&, 0ul>(void (* const&)(base::RepeatingCallback const&, unsigned int, mojo::HandleSignalsState const&), std::__Cr::tuple> const&, std::__Cr::integer_sequence, unsigned int&&, mojo::HandleSignalsState const&) base/functional/bind_internal.h:673:12 #21 0x55f87139d642 in base::internal::Invoker const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback const&>, base::internal::BindState const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback>, void (unsigned int, mojo::HandleSignalsState const&)>::Run(base::internal::BindStateBase*, unsigned int, mojo::HandleSignalsState const&) base/functional/bind_internal.h:989:12 #22 0x55f871ac7b09 in base::RepeatingCallback::Run(unsigned int, mojo::HandleSignalsState const&) const & base/functional/callback.h:346:12 #23 0x55f871ac7739 in mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&) mojo/public/cpp/system/simple_watcher.cc:286:14 #24 0x55f871ac8744 in void base::internal::Invoker&&, int&&, unsigned int&&, mojo::HandleSignalsState&&>, base::internal::BindState, int, unsigned int, mojo::HandleSignalsState>, void ()>::RunImpl, int, unsigned int, mojo::HandleSignalsState>, 0ul, 1ul, 2ul, 3ul>(void (mojo::SimpleWatcher::*&&)(int, unsigned int, mojo::HandleSignalsState const&), std::__Cr::tuple, int, unsigned int, mojo::HandleSignalsState>&&, std::__Cr::integer_sequence) base/functional/bind_internal.h:1069:14 #25 0x55f8715970f6 in base::TaskAnnotator::RunTaskImpl(base::PendingTask&) base/functional/callback.h:155:12 #26 0x55f87160c1c9 in base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow*) base/task/common/task_annotator.h:112:5 #27 0x55f87160b03a in base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:340:40 #28 0x55f8715c99a7 in base::MessagePumpDefault::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_default.cc:42:55 #29 0x55f87160d8d7 in base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool, base::TimeDelta) base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:644:12 #30 0x55f8715673e0 in base::RunLoop::Run(base::Location const&) base/run_loop.cc:135:14 #31 0x55f86f13e9be in chromecast::media::(anonymous namespace)::RunPendingTasks() chromecast/starboard/media/renderer/starboard_renderer_test.cc:78:12 #32 0x55f86f146b2f in chromecast::media::(anonymous namespace)::StarboardRendererTest_POC_DoubleInitializeLeavesDanglingSbPlayer_UAF_Test::TestBody() chromecast/starboard/media/renderer/starboard_renderer_test.cc:781:3 #33 0x55f870dc43db in testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2746:5 #34 0x55f870dc4fb8 in testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2892:11 #35 0x55f870dc6319 in testing::TestSuite::Run() third_party/googletest/src/googletest/src/gtest.cc:3070:30 #36 0x55f870dd91ae in testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:6062:44 #37 0x55f870dd874e in testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc #38 0x55f8717c637a in base::TestSuite::Run() base/test/test_suite.cc:440:16 #39 0x55f87179bb73 in base::internal::Invoker, base::internal::BindState>, int ()>::RunOnce(base::internal::BindStateBase*) base/functional/bind_internal.h:740:12 #40 0x55f86fb6f158 in base::OnceCallback::Run() && base/functional/callback.h:155:12 #41 0x55f8717d0149 in base::(anonymous namespace)::LaunchUnitTestsInternal(base::OnceCallback, unsigned long, int, unsigned long, bool, base::RepeatingCallback, base::OnceCallback) base/test/launcher/unit_test_launcher.cc:189:38 #42 0x55f8717cfb4e in base::LaunchUnitTests(int, char**, base::OnceCallback, unsigned long) base/test/launcher/unit_test_launcher.cc:337:10 #43 0x55f87179b87f in main base/test/run_all_unittests.cc:79:10 #44 0x7f7332efa249 (/lib/x86_64-linux-gnu/libc.so.6+0x27249) (BuildId: 6196744a316dbd57c0fd8968df1680aac482cec4) 0x7b93319e4d90 is located 0 bytes inside of 4-byte region [0x7b93319e4d90,0x7b93319e4d94) freed by thread T0 here: #0 0x55f86f03c682 in operator delete(void*, unsigned long) (/chromium/chromium/src/out/asan_cast/starboard_renderer_unittests+0x3644682) (BuildId: 8eef422b65afb985) #1 0x55f86f0ad3b8 in testing::internal::FunctionMocker::PerformAction(void const*, std::__Cr::tuple&&, std::__Cr::basic_string, std::__Cr::allocator> const&) const third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1742:19 #2 0x55f86f0ace5d in testing::internal::FunctionMocker::InvokeWith(std::__Cr::tuple&&) third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1869:12 #3 0x55f86f0ac756 in testing::internal::FunctionMocker::Invoke(void*) third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1548:12 #4 0x55f86f1696e6 in chromecast::media::StarboardPlayerManager::~StarboardPlayerManager() chromecast/starboard/media/renderer/starboard_player_manager.cc:194:17 #5 0x55f86f10561b in std::__Cr::default_delete::operator()(chromecast::media::StarboardPlayerManager*) const gen/third_party/libc++/src/include/__memory/unique_ptr.h:74:5 #6 0x55f86f174281 in chromecast::media::StarboardRenderer::Initialize(media::MediaResource*, media::RendererClient*, base::OnceCallback)>) gen/third_party/libc++/src/include/__memory/unique_ptr.h:225:5 #7 0x55f86f146ab0 in chromecast::media::(anonymous namespace)::StarboardRendererTest_POC_DoubleInitializeLeavesDanglingSbPlayer_UAF_Test::TestBody() chromecast/starboard/media/renderer/starboard_renderer_test.cc:766:12 #8 0x55f870dc43db in testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2746:5 #9 0x55f870dc4fb8 in testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2892:11 #10 0x55f870dc6319 in testing::TestSuite::Run() third_party/googletest/src/googletest/src/gtest.cc:3070:30 #11 0x55f870dd91ae in testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:6062:44 #12 0x55f870dd874e in testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc #13 0x55f8717c637a in base::TestSuite::Run() base/test/test_suite.cc:440:16 #14 0x55f87179bb73 in base::internal::Invoker, base::internal::BindState>, int ()>::RunOnce(base::internal::BindStateBase*) base/functional/bind_internal.h:740:12 #15 0x55f86fb6f158 in base::OnceCallback::Run() && base/functional/callback.h:155:12 #16 0x55f8717d0149 in base::(anonymous namespace)::LaunchUnitTestsInternal(base::OnceCallback, unsigned long, int, unsigned long, bool, base::RepeatingCallback, base::OnceCallback) base/test/launcher/unit_test_launcher.cc:189:38 #17 0x55f8717cfb4e in base::LaunchUnitTests(int, char**, base::OnceCallback, unsigned long) base/test/launcher/unit_test_launcher.cc:337:10 #18 0x55f87179b87f in main base/test/run_all_unittests.cc:79:10 #19 0x7f7332efa249 (/lib/x86_64-linux-gnu/libc.so.6+0x27249) (BuildId: 6196744a316dbd57c0fd8968df1680aac482cec4) previously allocated by thread T0 here: #0 0x55f86f03ba7d in operator new(unsigned long) (/chromium/chromium/src/out/asan_cast/starboard_renderer_unittests+0x3643a7d) (BuildId: 8eef422b65afb985) #1 0x55f86f147b3f in void* std::__Cr::__function::__policy_func::__call_func::StdFunctionAdaptor>(std::__Cr::__function::__policy_storage const*, chromecast::media::StarboardPlayerCreationParam const*, chromecast::media::StarboardPlayerCallbackHandler const*) chromecast/starboard/media/renderer/starboard_renderer_test.cc:706:44 #2 0x55f86f08fce4 in testing::internal::FunctionMocker::PerformAction(void const*, std::__Cr::tuple&&, std::__Cr::basic_string, std::__Cr::allocator> const&) const third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1742:19 #3 0x55f86f08f6ef in testing::internal::FunctionMocker::InvokeWith(std::__Cr::tuple&&) third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1869:12 #4 0x55f86f08efc0 in testing::internal::FunctionMocker::Invoke(chromecast::media::StarboardPlayerCreationParam const*, chromecast::media::StarboardPlayerCallbackHandler const*) third_party/googletest/src/googlemock/include/gmock/gmock-spec-builders.h:1548:12 #5 0x55f86f1677f8 in chromecast::media::StarboardPlayerManager::Create(chromecast::media::StarboardApiWrapper*, media::DemuxerStream*, media::DemuxerStream*, media::RendererClient*, chromecast::metrics::CastMetricsHelper*, scoped_refptr, bool) chromecast/starboard/media/renderer/starboard_player_manager.cc:127:32 #6 0x55f86f174268 in chromecast::media::StarboardRenderer::Initialize(media::MediaResource*, media::RendererClient*, base::OnceCallback)>) chromecast/starboard/media/renderer/starboard_renderer.cc:64:21 #7 0x55f86f1464f4 in chromecast::media::(anonymous namespace)::StarboardRendererTest_POC_DoubleInitializeLeavesDanglingSbPlayer_UAF_Test::TestBody() chromecast/starboard/media/renderer/starboard_renderer_test.cc:735:12 #8 0x55f870dc43db in testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2746:5 #9 0x55f870dc4fb8 in testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2892:11 #10 0x55f870dc6319 in testing::TestSuite::Run() third_party/googletest/src/googletest/src/gtest.cc:3070:30 #11 0x55f870dd91ae in testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:6062:44 #12 0x55f870dd874e in testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc #13 0x55f8717c637a in base::TestSuite::Run() base/test/test_suite.cc:440:16 #14 0x55f87179bb73 in base::internal::Invoker, base::internal::BindState>, int ()>::RunOnce(base::internal::BindStateBase*) base/functional/bind_internal.h:740:12 #15 0x55f86fb6f158 in base::OnceCallback::Run() && base/functional/callback.h:155:12 #16 0x55f8717d0149 in base::(anonymous namespace)::LaunchUnitTestsInternal(base::OnceCallback, unsigned long, int, unsigned long, bool, base::RepeatingCallback, base::OnceCallback) base/test/launcher/unit_test_launcher.cc:189:38 #17 0x55f8717cfb4e in base::LaunchUnitTests(int, char**, base::OnceCallback, unsigned long) base/test/launcher/unit_test_launcher.cc:337:10 #18 0x55f87179b87f in main base/test/run_all_unittests.cc:79:10 #19 0x7f7332efa249 (/lib/x86_64-linux-gnu/libc.so.6+0x27249) (BuildId: 6196744a316dbd57c0fd8968df1680aac482cec4) SUMMARY: AddressSanitizer: heap-use-after-free chromecast/starboard/media/renderer/starboard_renderer_test.cc:726:36 in void std::__Cr::__function::__policy_func::__call_func(std::__Cr::__function::__policy_storage const*, void*, int, int, int, int, int) Shadow bytes around the buggy address: 0x7b93319e4b00: fa fa fd fa fa fa 00 fa fa fa fd fa fa fa fd fa 0x7b93319e4b80: fa fa 00 fa fa fa 00 fa fa fa 00 fa fa fa 00 fa 0x7b93319e4c00: fa fa 00 fa fa fa 00 fa fa fa 00 00 fa fa 00 00 0x7b93319e4c80: fa fa 00 fa fa fa fd fd fa fa fd fd fa fa fd fa 0x7b93319e4d00: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fd =>0x7b93319e4d80: fa fa[fd]fa fa fa fd fa fa fa fd fa fa fa fd fa 0x7b93319e4e00: fa fa fd fa fa fa 00 00 fa fa fd fd fa fa 00 00 0x7b93319e4e80: fa fa 00 00 fa fa 00 00 fa fa fd fd fa fa 00 00 0x7b93319e4f00: fa fa 00 00 fa fa 00 00 fa fa fd fd fa fa 00 00 0x7b93319e4f80: fa fa 00 00 fa fa fd fa fa fa fd fa fa fa fd fd 0x7b93319e5000: fa fa fd fa fa fa fd fa fa fa 00 fa fa fa fd fa 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 Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb