1# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2# 3# Use of this source code is governed by a BSD-style license 4# that can be found in the LICENSE file in the root of the source 5# tree. An additional intellectual property rights grant can be found 6# in the file PATENTS. All contributing project authors may 7# be found in the AUTHORS file in the root of the source tree. 8 9import("//build/config/features.gni") 10import("//testing/libfuzzer/fuzzer_test.gni") 11import("../../webrtc.gni") 12 13rtc_library("webrtc_fuzzer_main") { 14 sources = [ "webrtc_fuzzer_main.cc" ] 15 deps = [ 16 "../../rtc_base:rtc_base_approved", 17 "//testing/libfuzzer:libfuzzer_main", 18 ] 19 20 # When WebRTC fuzzer tests are built on Chromium bots they need to link 21 # with Chromium's implementation of metrics and field trial. 22 if (build_with_chromium) { 23 deps += [ 24 "../../../webrtc_overrides:field_trial", 25 "../../../webrtc_overrides:metrics", 26 ] 27 } 28} 29 30rtc_library("fuzz_data_helper") { 31 testonly = true 32 sources = [ 33 "fuzz_data_helper.cc", 34 "fuzz_data_helper.h", 35 ] 36 deps = [ 37 "../../api:array_view", 38 "../../modules/rtp_rtcp:rtp_rtcp_format", 39 ] 40 visibility = [ ":*" ] # Only targets in this file can depend on this. 41} 42 43set_defaults("webrtc_fuzzer_test") { 44 absl_deps = [] 45} 46 47template("webrtc_fuzzer_test") { 48 fuzzer_test(target_name) { 49 forward_variables_from(invoker, "*") 50 deps += [ 51 ":fuzz_data_helper", 52 ":webrtc_fuzzer_main", 53 ] 54 55 # If absl_deps is [], no action is needed. If not [], then it needs to be 56 # converted to //third_party/abseil-cpp:absl when build_with_chromium=true 57 # otherwise it just needs to be added to deps. 58 if (absl_deps != []) { 59 if (!defined(deps)) { 60 deps = [] 61 } 62 if (build_with_chromium) { 63 deps += [ "//third_party/abseil-cpp:absl" ] 64 } else { 65 deps += absl_deps 66 } 67 } 68 69 if (!build_with_chromium && is_clang) { 70 suppressed_configs = [ "//build/config/clang:find_bad_constructs" ] 71 } 72 } 73} 74 75webrtc_fuzzer_test("h264_depacketizer_fuzzer") { 76 sources = [ "h264_depacketizer_fuzzer.cc" ] 77 deps = [ "../../modules/rtp_rtcp" ] 78} 79 80webrtc_fuzzer_test("vp8_depacketizer_fuzzer") { 81 sources = [ "vp8_depacketizer_fuzzer.cc" ] 82 deps = [ 83 "../../api:array_view", 84 "../../modules/rtp_rtcp", 85 "../../modules/rtp_rtcp:rtp_video_header", 86 ] 87} 88 89webrtc_fuzzer_test("vp9_depacketizer_fuzzer") { 90 sources = [ "vp9_depacketizer_fuzzer.cc" ] 91 deps = [ 92 "../../api:array_view", 93 "../../modules/rtp_rtcp", 94 "../../modules/rtp_rtcp:rtp_video_header", 95 ] 96} 97 98webrtc_fuzzer_test("vp8_qp_parser_fuzzer") { 99 sources = [ "vp8_qp_parser_fuzzer.cc" ] 100 deps = [ 101 "../../modules/video_coding:video_coding_utility", 102 "../../modules/video_coding/", 103 ] 104} 105 106webrtc_fuzzer_test("vp9_qp_parser_fuzzer") { 107 sources = [ "vp9_qp_parser_fuzzer.cc" ] 108 deps = [ 109 "../../modules/video_coding:video_coding_utility", 110 "../../modules/video_coding/", 111 ] 112} 113 114webrtc_fuzzer_test("h264_bitstream_parser_fuzzer") { 115 sources = [ "h264_bitstream_parser_fuzzer.cc" ] 116 deps = [ 117 "../../common_video", 118 "../../modules/video_coding/", 119 ] 120} 121 122webrtc_fuzzer_test("forward_error_correction_fuzzer") { 123 sources = [ "forward_error_correction_fuzzer.cc" ] 124 deps = [ 125 "../../api:scoped_refptr", 126 "../../modules/rtp_rtcp", 127 "../../modules/rtp_rtcp:rtp_rtcp_format", 128 "../../rtc_base:rtc_base_approved", 129 ] 130} 131 132webrtc_fuzzer_test("flexfec_header_reader_fuzzer") { 133 sources = [ "flexfec_header_reader_fuzzer.cc" ] 134 deps = [ 135 "../../api:scoped_refptr", 136 "../../modules/rtp_rtcp", 137 "../../modules/rtp_rtcp:rtp_rtcp_format", 138 "../../rtc_base:rtc_base_approved", 139 ] 140} 141 142webrtc_fuzzer_test("flexfec_sender_fuzzer") { 143 sources = [ "flexfec_sender_fuzzer.cc" ] 144 deps = [ 145 "../../modules/rtp_rtcp", 146 "../../modules/rtp_rtcp:rtp_rtcp_format", 147 "../../system_wrappers", 148 ] 149} 150 151webrtc_fuzzer_test("ulpfec_header_reader_fuzzer") { 152 sources = [ "ulpfec_header_reader_fuzzer.cc" ] 153 deps = [ 154 "../../api:scoped_refptr", 155 "../../modules/rtp_rtcp", 156 "../../modules/rtp_rtcp:fec_test_helper", 157 "../../modules/rtp_rtcp:rtp_rtcp_format", 158 "../../rtc_base:rtc_base_approved", 159 ] 160} 161 162webrtc_fuzzer_test("ulpfec_generator_fuzzer") { 163 sources = [ "ulpfec_generator_fuzzer.cc" ] 164 deps = [ 165 "../../modules:module_api_public", 166 "../../modules/rtp_rtcp", 167 "../../modules/rtp_rtcp:fec_test_helper", 168 "../../modules/rtp_rtcp:rtp_rtcp_format", 169 "../../rtc_base:checks", 170 "../../rtc_base:rtc_base_approved", 171 "../../system_wrappers", 172 ] 173} 174 175webrtc_fuzzer_test("ulpfec_receiver_fuzzer") { 176 sources = [ "ulpfec_receiver_fuzzer.cc" ] 177 deps = [ 178 ":fuzz_data_helper", 179 "../../modules/rtp_rtcp", 180 "../../modules/rtp_rtcp:rtp_rtcp_format", 181 "../../rtc_base:rtc_base_approved", 182 ] 183} 184 185webrtc_fuzzer_test("flexfec_receiver_fuzzer") { 186 sources = [ "flexfec_receiver_fuzzer.cc" ] 187 deps = [ 188 "../../modules/rtp_rtcp", 189 "../../modules/rtp_rtcp:rtp_rtcp_format", 190 "../../rtc_base:rtc_base_approved", 191 ] 192} 193 194webrtc_fuzzer_test("packet_buffer_fuzzer") { 195 sources = [ "packet_buffer_fuzzer.cc" ] 196 deps = [ 197 "../../modules/video_coding/", 198 "../../system_wrappers", 199 ] 200} 201 202webrtc_fuzzer_test("rtcp_receiver_fuzzer") { 203 sources = [ "rtcp_receiver_fuzzer.cc" ] 204 deps = [ 205 "../../modules/rtp_rtcp", 206 "../../modules/rtp_rtcp:rtp_rtcp_format", 207 "../../rtc_base:checks", 208 "../../rtc_base:rtc_base_approved", 209 "../../system_wrappers", 210 ] 211 seed_corpus = "corpora/rtcp-corpus" 212} 213 214webrtc_fuzzer_test("rtp_packet_fuzzer") { 215 sources = [ "rtp_packet_fuzzer.cc" ] 216 deps = [ "../../modules/rtp_rtcp:rtp_rtcp_format" ] 217 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 218 seed_corpus = "corpora/rtp-corpus" 219} 220 221webrtc_fuzzer_test("rtp_packetizer_av1_fuzzer") { 222 sources = [ "rtp_packetizer_av1_fuzzer.cc" ] 223 deps = [ 224 "../../api/video:video_frame_type", 225 "../../modules/rtp_rtcp:rtp_rtcp", 226 "../../modules/rtp_rtcp:rtp_rtcp_format", 227 "../../rtc_base:checks", 228 ] 229} 230 231webrtc_fuzzer_test("rtp_header_fuzzer") { 232 sources = [ "rtp_header_fuzzer.cc" ] 233 deps = [ 234 "../../modules/rtp_rtcp", 235 "../../modules/rtp_rtcp:rtp_rtcp_format", 236 ] 237} 238 239webrtc_fuzzer_test("congestion_controller_feedback_fuzzer") { 240 sources = [ "congestion_controller_feedback_fuzzer.cc" ] 241 deps = [ 242 "../../modules/congestion_controller", 243 "../../modules/pacing", 244 "../../modules/remote_bitrate_estimator", 245 "../../modules/rtp_rtcp:rtp_rtcp_format", 246 ] 247} 248 249rtc_library("audio_decoder_fuzzer") { 250 testonly = true 251 sources = [ 252 "audio_decoder_fuzzer.cc", 253 "audio_decoder_fuzzer.h", 254 ] 255 deps = [ 256 "../../api/audio_codecs:audio_codecs_api", 257 "../../modules/rtp_rtcp:rtp_rtcp_format", 258 "../../rtc_base:checks", 259 "../../rtc_base:rtc_base_approved", 260 ] 261 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 262} 263 264webrtc_fuzzer_test("audio_decoder_ilbc_fuzzer") { 265 sources = [ "audio_decoder_ilbc_fuzzer.cc" ] 266 deps = [ 267 ":audio_decoder_fuzzer", 268 "../../modules/audio_coding:ilbc", 269 ] 270} 271 272webrtc_fuzzer_test("audio_decoder_isac_fuzzer") { 273 sources = [ "audio_decoder_isac_fuzzer.cc" ] 274 deps = [ 275 ":audio_decoder_fuzzer", 276 "../../modules/audio_coding:isac", 277 ] 278} 279 280webrtc_fuzzer_test("audio_decoder_isacfix_fuzzer") { 281 sources = [ "audio_decoder_isacfix_fuzzer.cc" ] 282 deps = [ 283 ":audio_decoder_fuzzer", 284 "../../modules/audio_coding:isac_fix", 285 ] 286} 287 288webrtc_fuzzer_test("audio_decoder_opus_fuzzer") { 289 sources = [ "audio_decoder_opus_fuzzer.cc" ] 290 deps = [ 291 ":audio_decoder_fuzzer", 292 "../../modules/audio_coding:webrtc_opus", 293 ] 294} 295 296webrtc_fuzzer_test("audio_decoder_opus_redundant_fuzzer") { 297 sources = [ "audio_decoder_opus_redundant_fuzzer.cc" ] 298 deps = [ 299 ":audio_decoder_fuzzer", 300 "../../modules/audio_coding:webrtc_opus", 301 ] 302} 303 304webrtc_fuzzer_test("audio_decoder_multiopus_fuzzer") { 305 sources = [ "audio_decoder_multistream_opus_fuzzer.cc" ] 306 deps = [ 307 ":audio_decoder_fuzzer", 308 "../../api/audio_codecs/opus:audio_decoder_multiopus", 309 "../../api/audio_codecs/opus:audio_decoder_opus_config", 310 ] 311} 312 313rtc_library("audio_encoder_fuzzer") { 314 testonly = true 315 sources = [ 316 "audio_encoder_fuzzer.cc", 317 "audio_encoder_fuzzer.h", 318 ] 319 deps = [ 320 ":fuzz_data_helper", 321 "../../api:array_view", 322 "../../api/audio_codecs:audio_codecs_api", 323 "../../rtc_base:checks", 324 "../../rtc_base:rtc_base_approved", 325 ] 326} 327 328webrtc_fuzzer_test("audio_encoder_opus_fuzzer") { 329 sources = [ "audio_encoder_opus_fuzzer.cc" ] 330 deps = [ 331 ":audio_encoder_fuzzer", 332 "../../api/audio_codecs/opus:audio_encoder_opus", 333 "../../rtc_base:checks", 334 ] 335} 336 337webrtc_fuzzer_test("audio_encoder_isac_fixed_fuzzer") { 338 sources = [ "audio_encoder_isac_fixed_fuzzer.cc" ] 339 deps = [ 340 ":audio_encoder_fuzzer", 341 "../../api/audio_codecs/isac:audio_encoder_isac_fix", 342 "../../rtc_base:checks", 343 ] 344} 345 346webrtc_fuzzer_test("audio_encoder_isac_float_fuzzer") { 347 sources = [ "audio_encoder_isac_float_fuzzer.cc" ] 348 deps = [ 349 ":audio_encoder_fuzzer", 350 "../../api/audio_codecs/isac:audio_encoder_isac_float", 351 "../../rtc_base:checks", 352 ] 353} 354 355webrtc_fuzzer_test("turn_unwrap_fuzzer") { 356 sources = [ "turn_unwrap_fuzzer.cc" ] 357 deps = [ 358 "../../media", 359 "../../media:rtc_media_base", 360 ] 361} 362 363webrtc_fuzzer_test("neteq_rtp_fuzzer") { 364 sources = [ "neteq_rtp_fuzzer.cc" ] 365 deps = [ 366 "../../api:array_view", 367 "../../api/audio_codecs:builtin_audio_decoder_factory", 368 "../../modules/audio_coding:neteq", 369 "../../modules/audio_coding:neteq_test_tools", 370 "../../modules/audio_coding:neteq_tools_minimal", 371 "../../modules/audio_coding:pcm16b", 372 "../../modules/rtp_rtcp:rtp_rtcp_format", 373 "../../rtc_base:rtc_base_approved", 374 ] 375} 376 377webrtc_fuzzer_test("neteq_signal_fuzzer") { 378 sources = [ "neteq_signal_fuzzer.cc" ] 379 deps = [ 380 "../../api:array_view", 381 "../../api/audio_codecs:builtin_audio_decoder_factory", 382 "../../modules/audio_coding:neteq", 383 "../../modules/audio_coding:neteq_test_tools", 384 "../../modules/audio_coding:neteq_tools_minimal", 385 "../../modules/audio_coding:pcm16b", 386 "../../rtc_base:rtc_base_approved", 387 ] 388} 389 390webrtc_fuzzer_test("residual_echo_detector_fuzzer") { 391 sources = [ "residual_echo_detector_fuzzer.cc" ] 392 deps = [ 393 "../../api/audio:echo_detector_creator", 394 "../../rtc_base:checks", 395 "../../rtc_base:rtc_base_approved", 396 ] 397} 398 399webrtc_fuzzer_test("sdp_parser_fuzzer") { 400 sources = [ "sdp_parser_fuzzer.cc" ] 401 deps = [ 402 "../../api:libjingle_peerconnection_api", 403 "../../pc:libjingle_peerconnection", 404 ] 405 seed_corpus = "corpora/sdp-corpus" 406} 407 408webrtc_fuzzer_test("stun_parser_fuzzer") { 409 sources = [ "stun_parser_fuzzer.cc" ] 410 deps = [ 411 "../../api/transport:stun_types", 412 "../../p2p:rtc_p2p", 413 ] 414 seed_corpus = "corpora/stun-corpus" 415 dict = "corpora/stun.tokens" 416} 417 418webrtc_fuzzer_test("stun_validator_fuzzer") { 419 sources = [ "stun_validator_fuzzer.cc" ] 420 deps = [ 421 "../../api/transport:stun_types", 422 "../../p2p:rtc_p2p", 423 ] 424 seed_corpus = "corpora/stun-corpus" 425 dict = "corpora/stun.tokens" 426} 427 428webrtc_fuzzer_test("mdns_parser_fuzzer") { 429 sources = [ "mdns_parser_fuzzer.cc" ] 430 deps = [ 431 "../../p2p:rtc_p2p", 432 "../../rtc_base:rtc_base_approved", 433 ] 434 seed_corpus = "corpora/mdns-corpus" 435} 436 437webrtc_fuzzer_test("pseudotcp_parser_fuzzer") { 438 sources = [ "pseudotcp_parser_fuzzer.cc" ] 439 deps = [ 440 "../../p2p:rtc_p2p", 441 "../../rtc_base", 442 ] 443} 444 445rtc_library("audio_processing_fuzzer_helper") { 446 testonly = true 447 sources = [ 448 "audio_processing_fuzzer_helper.cc", 449 "audio_processing_fuzzer_helper.h", 450 ] 451 deps = [ 452 ":fuzz_data_helper", 453 "../../api/audio:audio_frame_api", 454 "../../modules/audio_processing", 455 "../../modules/audio_processing:api", 456 "../../modules/audio_processing:audio_frame_proxies", 457 "../../rtc_base:checks", 458 "../../rtc_base:rtc_base_approved", 459 ] 460 absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] 461} 462 463webrtc_fuzzer_test("audio_processing_fuzzer") { 464 sources = [ "audio_processing_configs_fuzzer.cc" ] 465 deps = [ 466 ":audio_processing_fuzzer_helper", 467 "../../api:scoped_refptr", 468 "../../api/audio:aec3_factory", 469 "../../api/task_queue:default_task_queue_factory", 470 "../../modules/audio_processing", 471 "../../modules/audio_processing:api", 472 "../../modules/audio_processing:audio_buffer", 473 "../../modules/audio_processing:audioproc_test_utils", 474 "../../modules/audio_processing/aec3", 475 "../../modules/audio_processing/aec_dump", 476 "../../modules/audio_processing/aec_dump:aec_dump_impl", 477 "../../rtc_base:rtc_base_approved", 478 "../../rtc_base:rtc_task_queue", 479 "../../rtc_base:safe_minmax", 480 "../../system_wrappers:field_trial", 481 ] 482 absl_deps = [ "//third_party/abseil-cpp/absl/memory" ] 483 seed_corpus = "corpora/audio_processing-corpus" 484} 485 486webrtc_fuzzer_test("agc_fuzzer") { 487 sources = [ "agc_fuzzer.cc" ] 488 deps = [ 489 ":fuzz_data_helper", 490 "../../modules/audio_processing", 491 "../../modules/audio_processing:api", 492 "../../modules/audio_processing:audio_buffer", 493 "../../rtc_base:rtc_base_approved", 494 "../../rtc_base:safe_minmax", 495 ] 496 497 seed_corpus = "corpora/agc-corpus" 498} 499 500webrtc_fuzzer_test("aec3_config_json_fuzzer") { 501 sources = [ "aec3_config_json_fuzzer.cc" ] 502 deps = [ 503 ":fuzz_data_helper", 504 "../../api/audio:aec3_config", 505 "../../api/audio:aec3_config_json", 506 ] 507 dict = "//testing/libfuzzer/fuzzers/dicts/json.dict" 508 seed_corpus = "corpora/aec3-config-json-corpus" 509} 510 511webrtc_fuzzer_test("aec3_fuzzer") { 512 defines = [] 513 if (apm_debug_dump) { 514 defines += [ "WEBRTC_APM_DEBUG_DUMP=1" ] 515 } else { 516 defines += [ "WEBRTC_APM_DEBUG_DUMP=0" ] 517 } 518 sources = [ "aec3_fuzzer.cc" ] 519 deps = [ 520 ":fuzz_data_helper", 521 "../../modules/audio_processing:api", 522 "../../modules/audio_processing:audio_buffer", 523 "../../modules/audio_processing/aec3", 524 ] 525} 526 527webrtc_fuzzer_test("comfort_noise_decoder_fuzzer") { 528 sources = [ "comfort_noise_decoder_fuzzer.cc" ] 529 deps = [ 530 "../../api:array_view", 531 "../../modules/audio_coding:webrtc_cng", 532 "../../rtc_base:rtc_base_approved", 533 ] 534} 535 536webrtc_fuzzer_test("rtp_depacketizer_av1_assemble_frame_fuzzer") { 537 sources = [ "rtp_depacketizer_av1_assemble_frame_fuzzer.cc" ] 538 seed_corpus = "corpora/rtp-depacketizer-av1-assemble-frame-corpus" 539 deps = [ 540 ":fuzz_data_helper", 541 "../../api:array_view", 542 "../../modules/rtp_rtcp", 543 ] 544} 545 546webrtc_fuzzer_test("rtp_dependency_descriptor_fuzzer") { 547 sources = [ "rtp_dependency_descriptor_fuzzer.cc" ] 548 seed_corpus = "corpora/dependency_descriptor-corpus" 549 deps = [ 550 "../../api:array_view", 551 "../../common_video/generic_frame_descriptor", 552 "../../modules/rtp_rtcp:rtp_rtcp_format", 553 "../../rtc_base:checks", 554 ] 555} 556 557webrtc_fuzzer_test("rtp_frame_reference_finder_fuzzer") { 558 sources = [ "rtp_frame_reference_finder_fuzzer.cc" ] 559 deps = [ 560 "../../api:rtp_packet_info", 561 "../../api:scoped_refptr", 562 "../../modules/video_coding/", 563 "../../system_wrappers", 564 ] 565} 566 567webrtc_fuzzer_test("frame_buffer2_fuzzer") { 568 sources = [ "frame_buffer2_fuzzer.cc" ] 569 deps = [ 570 "../../modules/video_coding/", 571 "../time_controller:time_controller", 572 ] 573} 574 575webrtc_fuzzer_test("field_trial_fuzzer") { 576 sources = [ "field_trial_fuzzer.cc" ] 577 deps = [ "../../system_wrappers:field_trial" ] 578 seed_corpus = "corpora/field_trial-corpus" 579} 580 581webrtc_fuzzer_test("string_to_number_fuzzer") { 582 sources = [ "string_to_number_fuzzer.cc" ] 583 deps = [ "../../rtc_base:rtc_base_approved" ] 584 seed_corpus = "corpora/string_to_number-corpus" 585} 586 587webrtc_fuzzer_test("sctp_utils_fuzzer") { 588 sources = [ "sctp_utils_fuzzer.cc" ] 589 deps = [ 590 "../../api:libjingle_peerconnection_api", 591 "../../pc:libjingle_peerconnection", 592 "../../pc:rtc_pc_base", 593 "../../rtc_base:rtc_base_approved", 594 ] 595} 596 597webrtc_fuzzer_test("rtp_header_parser_fuzzer") { 598 sources = [ "rtp_header_parser_fuzzer.cc" ] 599 deps = [ "../:rtp_test_utils" ] 600} 601 602webrtc_fuzzer_test("ssl_certificate_fuzzer") { 603 sources = [ "rtp_header_parser_fuzzer.cc" ] 604 deps = [ "../:rtp_test_utils" ] 605} 606 607webrtc_fuzzer_test("vp8_replay_fuzzer") { 608 sources = [ "vp8_replay_fuzzer.cc" ] 609 deps = [ 610 "../../rtc_base:rtc_base_approved", 611 "utils:rtp_replayer", 612 ] 613 seed_corpus = "corpora/rtpdump-corpus/vp8" 614} 615 616webrtc_fuzzer_test("vp9_replay_fuzzer") { 617 sources = [ "vp9_replay_fuzzer.cc" ] 618 deps = [ 619 "../../rtc_base:rtc_base_approved", 620 "utils:rtp_replayer", 621 ] 622 seed_corpus = "corpora/rtpdump-corpus/vp9" 623} 624