Reland "Add a fuzzer test that tries to connect a PeerConnection."
This reverts commit ae44fde18854390ca7a51bcab37ef199a1555e38.
Reason for revert: Added Chromium compile guards
Original change's description:
> Revert "Add a fuzzer test that tries to connect a PeerConnection."
>
> This reverts commit c67b77eee4b08c05638a219723a9141a65015da4.
>
> Reason for revert: Breaks the libfuzzer chromium bots for WebRTC roll.
>
> Original change's description:
> > Add a fuzzer test that tries to connect a PeerConnection.
> >
> > Bug: none
> > Change-Id: I975c6a4cd5c7dfc4a7689259292ea7d443d270f7
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209182
> > Commit-Queue: Harald Alvestrand <hta@webrtc.org>
> > Reviewed-by: Henrik Boström <hbos@webrtc.org>
> > Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#33369}
>
> NOPRESUBMIT=true
>
> Bug: none
> Change-Id: Ib5fa809eb698c64b7c01835e8a311eaf85b19a18
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209640
> Commit-Queue: Evan Shrubsole <eshr@google.com>
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#33380}
Bug: none
Change-Id: I07bab58f1216fb91b9b607e7ba978c28838d9411
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/210680
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33397}
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 2899daf..619c2d2 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -958,87 +958,6 @@
]
}
- rtc_library("pc_test_utils") {
- testonly = true
- sources = [
- "test/fake_audio_capture_module.cc",
- "test/fake_audio_capture_module.h",
- "test/fake_data_channel_provider.h",
- "test/fake_peer_connection_base.h",
- "test/fake_peer_connection_for_stats.h",
- "test/fake_periodic_video_source.h",
- "test/fake_periodic_video_track_source.h",
- "test/fake_rtc_certificate_generator.h",
- "test/fake_video_track_renderer.h",
- "test/fake_video_track_source.h",
- "test/frame_generator_capturer_video_track_source.h",
- "test/mock_channel_interface.h",
- "test/mock_data_channel.h",
- "test/mock_delayable.h",
- "test/mock_peer_connection_observers.h",
- "test/mock_rtp_receiver_internal.h",
- "test/mock_rtp_sender_internal.h",
- "test/peer_connection_test_wrapper.cc",
- "test/peer_connection_test_wrapper.h",
- "test/rtc_stats_obtainer.h",
- "test/test_sdp_strings.h",
- ]
-
- deps = [
- ":jitter_buffer_delay",
- ":jitter_buffer_delay_interface",
- ":libjingle_peerconnection",
- ":peerconnection",
- ":rtc_pc_base",
- ":rtp_receiver",
- ":rtp_sender",
- ":video_track_source",
- "../api:audio_options_api",
- "../api:create_frame_generator",
- "../api:create_peerconnection_factory",
- "../api:libjingle_peerconnection_api",
- "../api:media_stream_interface",
- "../api:rtc_error",
- "../api:rtc_stats_api",
- "../api:scoped_refptr",
- "../api:sequence_checker",
- "../api/audio:audio_mixer_api",
- "../api/audio_codecs:audio_codecs_api",
- "../api/task_queue",
- "../api/task_queue:default_task_queue_factory",
- "../api/video:builtin_video_bitrate_allocator_factory",
- "../api/video:video_frame",
- "../api/video:video_rtp_headers",
- "../api/video_codecs:builtin_video_decoder_factory",
- "../api/video_codecs:builtin_video_encoder_factory",
- "../api/video_codecs:video_codecs_api",
- "../call:call_interfaces",
- "../media:rtc_data",
- "../media:rtc_media",
- "../media:rtc_media_base",
- "../media:rtc_media_tests_utils",
- "../modules/audio_device",
- "../modules/audio_processing",
- "../modules/audio_processing:api",
- "../p2p:fake_port_allocator",
- "../p2p:p2p_test_utils",
- "../p2p:rtc_p2p",
- "../rtc_base",
- "../rtc_base:checks",
- "../rtc_base:gunit_helpers",
- "../rtc_base:rtc_base_approved",
- "../rtc_base:rtc_task_queue",
- "../rtc_base:task_queue_for_test",
- "../rtc_base:threading",
- "../rtc_base/synchronization:mutex",
- "../rtc_base/task_utils:repeating_task",
- "../rtc_base/third_party/sigslot",
- "../test:test_support",
- "../test:video_test_common",
- ]
- absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
- }
-
rtc_test("peerconnection_unittests") {
testonly = true
sources = [
@@ -1080,8 +999,6 @@
"sdp_serializer_unittest.cc",
"stats_collector_unittest.cc",
"test/fake_audio_capture_module_unittest.cc",
- "test/integration_test_helpers.cc",
- "test/integration_test_helpers.h",
"test/test_sdp_strings.h",
"track_media_info_map_unittest.cc",
"video_rtp_track_source_unittest.cc",
@@ -1097,6 +1014,7 @@
":audio_rtp_receiver",
":audio_track",
":dtmf_sender",
+ ":integration_test_helpers",
":jitter_buffer_delay",
":jitter_buffer_delay_interface",
":media_stream",
@@ -1244,4 +1162,188 @@
]
}
}
+
+ rtc_library("integration_test_helpers") {
+ testonly = true
+ sources = [
+ "test/integration_test_helpers.cc",
+ "test/integration_test_helpers.h",
+ ]
+ deps = [
+ ":audio_rtp_receiver",
+ ":audio_track",
+ ":dtmf_sender",
+ ":jitter_buffer_delay",
+ ":jitter_buffer_delay_interface",
+ ":media_stream",
+ ":pc_test_utils",
+ ":peerconnection",
+ ":remote_audio_source",
+ ":rtc_pc_base",
+ ":rtp_parameters_conversion",
+ ":rtp_receiver",
+ ":rtp_sender",
+ ":rtp_transceiver",
+ ":usage_pattern",
+ ":video_rtp_receiver",
+ ":video_rtp_track_source",
+ ":video_track",
+ ":video_track_source",
+ "../api:array_view",
+ "../api:audio_options_api",
+ "../api:callfactory_api",
+ "../api:create_peerconnection_factory",
+ "../api:fake_frame_decryptor",
+ "../api:fake_frame_encryptor",
+ "../api:function_view",
+ "../api:libjingle_logging_api",
+ "../api:libjingle_peerconnection_api",
+ "../api:media_stream_interface",
+ "../api:mock_rtp",
+ "../api:packet_socket_factory",
+ "../api:rtc_error",
+ "../api:rtc_stats_api",
+ "../api:rtp_parameters",
+ "../api:rtp_transceiver_direction",
+ "../api:scoped_refptr",
+ "../api/audio:audio_mixer_api",
+ "../api/crypto:frame_decryptor_interface",
+ "../api/crypto:frame_encryptor_interface",
+ "../api/crypto:options",
+ "../api/rtc_event_log",
+ "../api/rtc_event_log:rtc_event_log_factory",
+ "../api/task_queue",
+ "../api/task_queue:default_task_queue_factory",
+ "../api/transport:field_trial_based_config",
+ "../api/transport:webrtc_key_value_config",
+ "../api/transport/rtp:rtp_source",
+ "../api/units:time_delta",
+ "../api/video:builtin_video_bitrate_allocator_factory",
+ "../api/video:video_rtp_headers",
+ "../api/video_codecs:video_codecs_api",
+ "../call:call_interfaces",
+ "../call/adaptation:resource_adaptation_test_utilities",
+ "../logging:fake_rtc_event_log",
+ "../media:rtc_audio_video",
+ "../media:rtc_media_base",
+ "../media:rtc_media_config",
+ "../media:rtc_media_engine_defaults",
+ "../media:rtc_media_tests_utils",
+ "../modules/audio_device:audio_device_api",
+ "../modules/audio_processing:api",
+ "../modules/audio_processing:audio_processing_statistics",
+ "../modules/audio_processing:audioproc_test_utils",
+ "../modules/rtp_rtcp:rtp_rtcp_format",
+ "../p2p:fake_ice_transport",
+ "../p2p:fake_port_allocator",
+ "../p2p:p2p_server_utils",
+ "../p2p:p2p_test_utils",
+ "../p2p:rtc_p2p",
+ "../rtc_base",
+ "../rtc_base:checks",
+ "../rtc_base:gunit_helpers",
+ "../rtc_base:ip_address",
+ "../rtc_base:rtc_base_tests_utils",
+ "../rtc_base:rtc_json",
+ "../rtc_base:socket_address",
+ "../rtc_base:threading",
+ "../rtc_base:timeutils",
+ "../rtc_base/synchronization:mutex",
+ "../rtc_base/third_party/base64",
+ "../rtc_base/third_party/sigslot",
+ "../system_wrappers:metrics",
+ "../test:field_trial",
+ "../test:fileutils",
+ "../test:rtp_test_utils",
+ "../test:test_support",
+ "../test/pc/sctp:fake_sctp_transport",
+ ]
+ absl_deps = [
+ "//third_party/abseil-cpp/absl/algorithm:container",
+ "//third_party/abseil-cpp/absl/memory",
+ "//third_party/abseil-cpp/absl/strings",
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+ }
+
+ rtc_library("pc_test_utils") {
+ testonly = true
+ sources = [
+ "test/fake_audio_capture_module.cc",
+ "test/fake_audio_capture_module.h",
+ "test/fake_data_channel_provider.h",
+ "test/fake_peer_connection_base.h",
+ "test/fake_peer_connection_for_stats.h",
+ "test/fake_periodic_video_source.h",
+ "test/fake_periodic_video_track_source.h",
+ "test/fake_rtc_certificate_generator.h",
+ "test/fake_video_track_renderer.h",
+ "test/fake_video_track_source.h",
+ "test/frame_generator_capturer_video_track_source.h",
+ "test/mock_channel_interface.h",
+ "test/mock_data_channel.h",
+ "test/mock_delayable.h",
+ "test/mock_peer_connection_observers.h",
+ "test/mock_rtp_receiver_internal.h",
+ "test/mock_rtp_sender_internal.h",
+ "test/peer_connection_test_wrapper.cc",
+ "test/peer_connection_test_wrapper.h",
+ "test/rtc_stats_obtainer.h",
+ "test/test_sdp_strings.h",
+ ]
+
+ deps = [
+ ":jitter_buffer_delay",
+ ":jitter_buffer_delay_interface",
+ ":libjingle_peerconnection",
+ ":peerconnection",
+ ":rtc_pc_base",
+ ":rtp_receiver",
+ ":rtp_sender",
+ ":video_track_source",
+ "../api:audio_options_api",
+ "../api:create_frame_generator",
+ "../api:create_peerconnection_factory",
+ "../api:libjingle_peerconnection_api",
+ "../api:media_stream_interface",
+ "../api:rtc_error",
+ "../api:rtc_stats_api",
+ "../api:scoped_refptr",
+ "../api:sequence_checker",
+ "../api/audio:audio_mixer_api",
+ "../api/audio_codecs:audio_codecs_api",
+ "../api/task_queue",
+ "../api/task_queue:default_task_queue_factory",
+ "../api/video:builtin_video_bitrate_allocator_factory",
+ "../api/video:video_frame",
+ "../api/video:video_rtp_headers",
+ "../api/video_codecs:builtin_video_decoder_factory",
+ "../api/video_codecs:builtin_video_encoder_factory",
+ "../api/video_codecs:video_codecs_api",
+ "../call:call_interfaces",
+ "../media:rtc_data",
+ "../media:rtc_media",
+ "../media:rtc_media_base",
+ "../media:rtc_media_tests_utils",
+ "../modules/audio_device",
+ "../modules/audio_processing",
+ "../modules/audio_processing:api",
+ "../p2p:fake_port_allocator",
+ "../p2p:p2p_test_utils",
+ "../p2p:rtc_p2p",
+ "../rtc_base",
+ "../rtc_base:checks",
+ "../rtc_base:gunit_helpers",
+ "../rtc_base:rtc_base_approved",
+ "../rtc_base:rtc_task_queue",
+ "../rtc_base:task_queue_for_test",
+ "../rtc_base:threading",
+ "../rtc_base/synchronization:mutex",
+ "../rtc_base/task_utils:repeating_task",
+ "../rtc_base/third_party/sigslot",
+ "../test:test_support",
+ "../test:video_test_common",
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+ }
}
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index 44387ad..e08ba3c 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -406,6 +406,23 @@
seed_corpus = "corpora/sdp-corpus"
}
+if (!build_with_chromium) {
+ # This target depends on test infrastructure that can't be built
+ # with Chromium at the moment.
+ # TODO(bugs.chromium.org/12534): Make this fuzzer build in Chromium.
+
+ webrtc_fuzzer_test("sdp_integration_fuzzer") {
+ sources = [ "sdp_integration_fuzzer.cc" ]
+ deps = [
+ "../../api:libjingle_peerconnection_api",
+ "../../pc:integration_test_helpers",
+ "../../pc:libjingle_peerconnection",
+ "../../test:test_support",
+ ]
+ seed_corpus = "corpora/sdp-corpus"
+ }
+}
+
webrtc_fuzzer_test("stun_parser_fuzzer") {
sources = [ "stun_parser_fuzzer.cc" ]
deps = [
diff --git a/test/fuzzers/sdp_integration_fuzzer.cc b/test/fuzzers/sdp_integration_fuzzer.cc
new file mode 100644
index 0000000..7cae917
--- /dev/null
+++ b/test/fuzzers/sdp_integration_fuzzer.cc
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "pc/test/integration_test_helpers.h"
+
+namespace webrtc {
+
+class FuzzerTest : public PeerConnectionIntegrationBaseTest {
+ public:
+ FuzzerTest()
+ : PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan) {}
+
+ void TestBody() override {}
+};
+
+void FuzzOneInput(const uint8_t* data, size_t size) {
+ if (size > 16384) {
+ return;
+ }
+ std::string message(reinterpret_cast<const char*>(data), size);
+
+ FuzzerTest test;
+ test.CreatePeerConnectionWrappers();
+ test.ConnectFakeSignaling();
+
+ rtc::scoped_refptr<MockSetSessionDescriptionObserver> srd_observer(
+ new rtc::RefCountedObject<MockSetSessionDescriptionObserver>());
+
+ webrtc::SdpParseError error;
+ std::unique_ptr<webrtc::SessionDescriptionInterface> sdp(
+ CreateSessionDescription("offer", message, &error));
+ // Note: This form of SRD takes ownership of the description.
+ test.caller()->pc()->SetRemoteDescription(srd_observer, sdp.release());
+}
+
+} // namespace webrtc