Remove MDNS message implementation
No customers have been identified.
Bug: chromium:1197965
Change-Id: Ia3063d0909c718ffb8e824225c8c60180551115a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/214963
Reviewed-by: Taylor <deadbeef@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33700}
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 84832a3..244bc39 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -45,8 +45,6 @@
"base/ice_credentials_iterator.h",
"base/ice_transport_internal.cc",
"base/ice_transport_internal.h",
- "base/mdns_message.cc",
- "base/mdns_message.h",
"base/p2p_constants.cc",
"base/p2p_constants.h",
"base/p2p_transport_channel.cc",
@@ -215,7 +213,6 @@
"base/basic_async_resolver_factory_unittest.cc",
"base/dtls_transport_unittest.cc",
"base/ice_credentials_iterator_unittest.cc",
- "base/mdns_message_unittest.cc",
"base/p2p_transport_channel_unittest.cc",
"base/port_allocator_unittest.cc",
"base/port_unittest.cc",
diff --git a/p2p/base/mdns_message.cc b/p2p/base/mdns_message.cc
deleted file mode 100644
index 1aa996c..0000000
--- a/p2p/base/mdns_message.cc
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Copyright 2018 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 "p2p/base/mdns_message.h"
-
-#include "rtc_base/logging.h"
-#include "rtc_base/net_helpers.h"
-#include "rtc_base/string_encode.h"
-
-namespace webrtc {
-
-namespace {
-// RFC 1035, Section 4.1.1.
-//
-// QR bit.
-constexpr uint16_t kMdnsFlagMaskQueryOrResponse = 0x8000;
-// AA bit.
-constexpr uint16_t kMdnsFlagMaskAuthoritative = 0x0400;
-// RFC 1035, Section 4.1.2, QCLASS and RFC 6762, Section 18.12, repurposing of
-// top bit of QCLASS as the unicast response bit.
-constexpr uint16_t kMdnsQClassMaskUnicastResponse = 0x8000;
-constexpr size_t kMdnsHeaderSizeBytes = 12;
-
-bool ReadDomainName(MessageBufferReader* buf, std::string* name) {
- size_t name_start_pos = buf->CurrentOffset();
- uint8_t label_length;
- if (!buf->ReadUInt8(&label_length)) {
- return false;
- }
- // RFC 1035, Section 4.1.4.
- //
- // If the first two bits of the length octet are ones, the name is compressed
- // and the rest six bits with the next octet denotes its position in the
- // message by the offset from the start of the message.
- auto is_pointer = [](uint8_t octet) {
- return (octet & 0x80) && (octet & 0x40);
- };
- while (label_length && !is_pointer(label_length)) {
- // RFC 1035, Section 2.3.1, labels are restricted to 63 octets or less.
- if (label_length > 63) {
- return false;
- }
- std::string label;
- if (!buf->ReadString(&label, label_length)) {
- return false;
- }
- (*name) += label + ".";
- if (!buf->ReadUInt8(&label_length)) {
- return false;
- }
- }
- if (is_pointer(label_length)) {
- uint8_t next_octet;
- if (!buf->ReadUInt8(&next_octet)) {
- return false;
- }
- size_t pos_jump_to = ((label_length & 0x3f) << 8) | next_octet;
- // A legitimate pointer only refers to a prior occurrence of the same name,
- // and we should only move strictly backward to a prior name field after the
- // header.
- if (pos_jump_to >= name_start_pos || pos_jump_to < kMdnsHeaderSizeBytes) {
- return false;
- }
- MessageBufferReader new_buf(buf->MessageData(), buf->MessageLength());
- if (!new_buf.Consume(pos_jump_to)) {
- return false;
- }
- return ReadDomainName(&new_buf, name);
- }
- return true;
-}
-
-void WriteDomainName(rtc::ByteBufferWriter* buf, const std::string& name) {
- std::vector<std::string> labels;
- rtc::tokenize(name, '.', &labels);
- for (const auto& label : labels) {
- buf->WriteUInt8(label.length());
- buf->WriteString(label);
- }
- buf->WriteUInt8(0);
-}
-
-} // namespace
-
-void MdnsHeader::SetQueryOrResponse(bool is_query) {
- if (is_query) {
- flags &= ~kMdnsFlagMaskQueryOrResponse;
- } else {
- flags |= kMdnsFlagMaskQueryOrResponse;
- }
-}
-
-void MdnsHeader::SetAuthoritative(bool is_authoritative) {
- if (is_authoritative) {
- flags |= kMdnsFlagMaskAuthoritative;
- } else {
- flags &= ~kMdnsFlagMaskAuthoritative;
- }
-}
-
-bool MdnsHeader::IsAuthoritative() const {
- return flags & kMdnsFlagMaskAuthoritative;
-}
-
-bool MdnsHeader::Read(MessageBufferReader* buf) {
- if (!buf->ReadUInt16(&id) || !buf->ReadUInt16(&flags) ||
- !buf->ReadUInt16(&qdcount) || !buf->ReadUInt16(&ancount) ||
- !buf->ReadUInt16(&nscount) || !buf->ReadUInt16(&arcount)) {
- RTC_LOG(LS_ERROR) << "Invalid mDNS header.";
- return false;
- }
- return true;
-}
-
-void MdnsHeader::Write(rtc::ByteBufferWriter* buf) const {
- buf->WriteUInt16(id);
- buf->WriteUInt16(flags);
- buf->WriteUInt16(qdcount);
- buf->WriteUInt16(ancount);
- buf->WriteUInt16(nscount);
- buf->WriteUInt16(arcount);
-}
-
-bool MdnsHeader::IsQuery() const {
- return !(flags & kMdnsFlagMaskQueryOrResponse);
-}
-
-MdnsSectionEntry::MdnsSectionEntry() = default;
-MdnsSectionEntry::~MdnsSectionEntry() = default;
-MdnsSectionEntry::MdnsSectionEntry(const MdnsSectionEntry& other) = default;
-
-void MdnsSectionEntry::SetType(SectionEntryType type) {
- switch (type) {
- case SectionEntryType::kA:
- type_ = 1;
- return;
- case SectionEntryType::kAAAA:
- type_ = 28;
- return;
- default:
- RTC_NOTREACHED();
- }
-}
-
-SectionEntryType MdnsSectionEntry::GetType() const {
- switch (type_) {
- case 1:
- return SectionEntryType::kA;
- case 28:
- return SectionEntryType::kAAAA;
- default:
- return SectionEntryType::kUnsupported;
- }
-}
-
-void MdnsSectionEntry::SetClass(SectionEntryClass cls) {
- switch (cls) {
- case SectionEntryClass::kIN:
- class_ = 1;
- return;
- default:
- RTC_NOTREACHED();
- }
-}
-
-SectionEntryClass MdnsSectionEntry::GetClass() const {
- switch (class_) {
- case 1:
- return SectionEntryClass::kIN;
- default:
- return SectionEntryClass::kUnsupported;
- }
-}
-
-MdnsQuestion::MdnsQuestion() = default;
-MdnsQuestion::MdnsQuestion(const MdnsQuestion& other) = default;
-MdnsQuestion::~MdnsQuestion() = default;
-
-bool MdnsQuestion::Read(MessageBufferReader* buf) {
- if (!ReadDomainName(buf, &name_)) {
- RTC_LOG(LS_ERROR) << "Invalid name.";
- return false;
- }
- if (!buf->ReadUInt16(&type_) || !buf->ReadUInt16(&class_)) {
- RTC_LOG(LS_ERROR) << "Invalid type and class.";
- return false;
- }
- return true;
-}
-
-bool MdnsQuestion::Write(rtc::ByteBufferWriter* buf) const {
- WriteDomainName(buf, name_);
- buf->WriteUInt16(type_);
- buf->WriteUInt16(class_);
- return true;
-}
-
-void MdnsQuestion::SetUnicastResponse(bool should_unicast) {
- if (should_unicast) {
- class_ |= kMdnsQClassMaskUnicastResponse;
- } else {
- class_ &= ~kMdnsQClassMaskUnicastResponse;
- }
-}
-
-bool MdnsQuestion::ShouldUnicastResponse() const {
- return class_ & kMdnsQClassMaskUnicastResponse;
-}
-
-MdnsResourceRecord::MdnsResourceRecord() = default;
-MdnsResourceRecord::MdnsResourceRecord(const MdnsResourceRecord& other) =
- default;
-MdnsResourceRecord::~MdnsResourceRecord() = default;
-
-bool MdnsResourceRecord::Read(MessageBufferReader* buf) {
- if (!ReadDomainName(buf, &name_)) {
- return false;
- }
- if (!buf->ReadUInt16(&type_) || !buf->ReadUInt16(&class_) ||
- !buf->ReadUInt32(&ttl_seconds_) || !buf->ReadUInt16(&rdlength_)) {
- return false;
- }
-
- switch (GetType()) {
- case SectionEntryType::kA:
- return ReadARData(buf);
- case SectionEntryType::kAAAA:
- return ReadQuadARData(buf);
- case SectionEntryType::kUnsupported:
- return false;
- default:
- RTC_NOTREACHED();
- }
- return false;
-}
-bool MdnsResourceRecord::ReadARData(MessageBufferReader* buf) {
- // A RDATA contains a 32-bit IPv4 address.
- return buf->ReadString(&rdata_, 4);
-}
-
-bool MdnsResourceRecord::ReadQuadARData(MessageBufferReader* buf) {
- // AAAA RDATA contains a 128-bit IPv6 address.
- return buf->ReadString(&rdata_, 16);
-}
-
-bool MdnsResourceRecord::Write(rtc::ByteBufferWriter* buf) const {
- WriteDomainName(buf, name_);
- buf->WriteUInt16(type_);
- buf->WriteUInt16(class_);
- buf->WriteUInt32(ttl_seconds_);
- buf->WriteUInt16(rdlength_);
- switch (GetType()) {
- case SectionEntryType::kA:
- WriteARData(buf);
- return true;
- case SectionEntryType::kAAAA:
- WriteQuadARData(buf);
- return true;
- case SectionEntryType::kUnsupported:
- return false;
- default:
- RTC_NOTREACHED();
- }
- return true;
-}
-
-void MdnsResourceRecord::WriteARData(rtc::ByteBufferWriter* buf) const {
- buf->WriteString(rdata_);
-}
-
-void MdnsResourceRecord::WriteQuadARData(rtc::ByteBufferWriter* buf) const {
- buf->WriteString(rdata_);
-}
-
-bool MdnsResourceRecord::SetIPAddressInRecordData(
- const rtc::IPAddress& address) {
- int af = address.family();
- if (af != AF_INET && af != AF_INET6) {
- return false;
- }
- char out[16] = {0};
- if (!rtc::inet_pton(af, address.ToString().c_str(), out)) {
- return false;
- }
- rdlength_ = (af == AF_INET) ? 4 : 16;
- rdata_ = std::string(out, rdlength_);
- return true;
-}
-
-bool MdnsResourceRecord::GetIPAddressFromRecordData(
- rtc::IPAddress* address) const {
- if (GetType() != SectionEntryType::kA &&
- GetType() != SectionEntryType::kAAAA) {
- return false;
- }
- if (rdata_.size() != 4 && rdata_.size() != 16) {
- return false;
- }
- char out[INET6_ADDRSTRLEN] = {0};
- int af = (GetType() == SectionEntryType::kA) ? AF_INET : AF_INET6;
- if (!rtc::inet_ntop(af, rdata_.data(), out, sizeof(out))) {
- return false;
- }
- return rtc::IPFromString(std::string(out), address);
-}
-
-MdnsMessage::MdnsMessage() = default;
-MdnsMessage::~MdnsMessage() = default;
-
-bool MdnsMessage::Read(MessageBufferReader* buf) {
- RTC_DCHECK_EQ(0u, buf->CurrentOffset());
- if (!header_.Read(buf)) {
- return false;
- }
-
- auto read_question = [&buf](std::vector<MdnsQuestion>* section,
- uint16_t count) {
- section->resize(count);
- for (auto& question : (*section)) {
- if (!question.Read(buf)) {
- return false;
- }
- }
- return true;
- };
- auto read_rr = [&buf](std::vector<MdnsResourceRecord>* section,
- uint16_t count) {
- section->resize(count);
- for (auto& rr : (*section)) {
- if (!rr.Read(buf)) {
- return false;
- }
- }
- return true;
- };
-
- if (!read_question(&question_section_, header_.qdcount) ||
- !read_rr(&answer_section_, header_.ancount) ||
- !read_rr(&authority_section_, header_.nscount) ||
- !read_rr(&additional_section_, header_.arcount)) {
- return false;
- }
- return true;
-}
-
-bool MdnsMessage::Write(rtc::ByteBufferWriter* buf) const {
- header_.Write(buf);
-
- auto write_rr = [&buf](const std::vector<MdnsResourceRecord>& section) {
- for (const auto& rr : section) {
- if (!rr.Write(buf)) {
- return false;
- }
- }
- return true;
- };
-
- for (const auto& question : question_section_) {
- if (!question.Write(buf)) {
- return false;
- }
- }
- if (!write_rr(answer_section_) || !write_rr(authority_section_) ||
- !write_rr(additional_section_)) {
- return false;
- }
-
- return true;
-}
-
-bool MdnsMessage::ShouldUnicastResponse() const {
- bool should_unicast = false;
- for (const auto& question : question_section_) {
- should_unicast |= question.ShouldUnicastResponse();
- }
- return should_unicast;
-}
-
-void MdnsMessage::AddQuestion(const MdnsQuestion& question) {
- question_section_.push_back(question);
- header_.qdcount = question_section_.size();
-}
-
-void MdnsMessage::AddAnswerRecord(const MdnsResourceRecord& answer) {
- answer_section_.push_back(answer);
- header_.ancount = answer_section_.size();
-}
-
-} // namespace webrtc
diff --git a/p2p/base/mdns_message.h b/p2p/base/mdns_message.h
deleted file mode 100644
index 79be521..0000000
--- a/p2p/base/mdns_message.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2018 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.
- */
-
-#ifndef P2P_BASE_MDNS_MESSAGE_H_
-#define P2P_BASE_MDNS_MESSAGE_H_
-
-// This file contains classes to read and write mDNSs message defined in RFC
-// 6762 and RFC 1025 (DNS messages). Note that it is recommended by RFC 6762 to
-// use the name compression scheme defined in RFC 1035 whenever possible. We
-// currently only implement the capability of reading compressed names in mDNS
-// messages in MdnsMessage::Read(); however, the MdnsMessage::Write() does not
-// support name compression yet.
-//
-// Fuzzer tests (test/fuzzers/mdns_parser_fuzzer.cc) MUST always be performed
-// after changes made to this file.
-
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "rtc_base/byte_buffer.h"
-#include "rtc_base/ip_address.h"
-#include "rtc_base/message_buffer_reader.h"
-
-namespace webrtc {
-
-// We use "section entry" to denote either a question or a resource record.
-//
-// RFC 1035 Section 3.2.2.
-enum class SectionEntryType {
- kA,
- kAAAA,
- // Only the above types are processed in the current implementation.
- kUnsupported,
-};
-
-// RFC 1035 Section 3.2.4.
-enum class SectionEntryClass {
- kIN,
- kUnsupported,
-};
-
-// RFC 1035, Section 4.1.1.
-class MdnsHeader final {
- public:
- bool Read(MessageBufferReader* buf);
- void Write(rtc::ByteBufferWriter* buf) const;
-
- void SetQueryOrResponse(bool is_query);
- bool IsQuery() const;
- void SetAuthoritative(bool is_authoritative);
- bool IsAuthoritative() const;
-
- uint16_t id = 0;
- uint16_t flags = 0;
- // Number of entries in the question section.
- uint16_t qdcount = 0;
- // Number of resource records in the answer section.
- uint16_t ancount = 0;
- // Number of name server resource records in the authority records section.
- uint16_t nscount = 0;
- // Number of resource records in the additional records section.
- uint16_t arcount = 0;
-};
-
-// Entries in each section after the header share a common structure. Note that
-// this is not a concept defined in RFC 1035.
-class MdnsSectionEntry {
- public:
- MdnsSectionEntry();
- MdnsSectionEntry(const MdnsSectionEntry& other);
- virtual ~MdnsSectionEntry();
- virtual bool Read(MessageBufferReader* buf) = 0;
- virtual bool Write(rtc::ByteBufferWriter* buf) const = 0;
-
- void SetName(const std::string& name) { name_ = name; }
- // Returns the fully qualified domain name in the section entry, i.e., QNAME
- // in a question or NAME in a resource record.
- std::string GetName() const { return name_; }
-
- void SetType(SectionEntryType type);
- SectionEntryType GetType() const;
- void SetClass(SectionEntryClass cls);
- SectionEntryClass GetClass() const;
-
- protected:
- std::string name_; // Fully qualified domain name.
- uint16_t type_ = 0;
- uint16_t class_ = 0;
-};
-
-// RFC 1035, Section 4.1.2.
-class MdnsQuestion final : public MdnsSectionEntry {
- public:
- MdnsQuestion();
- MdnsQuestion(const MdnsQuestion& other);
- ~MdnsQuestion() override;
-
- bool Read(MessageBufferReader* buf) override;
- bool Write(rtc::ByteBufferWriter* buf) const override;
-
- void SetUnicastResponse(bool should_unicast);
- bool ShouldUnicastResponse() const;
-};
-
-// RFC 1035, Section 4.1.3.
-class MdnsResourceRecord final : public MdnsSectionEntry {
- public:
- MdnsResourceRecord();
- MdnsResourceRecord(const MdnsResourceRecord& other);
- ~MdnsResourceRecord() override;
-
- bool Read(MessageBufferReader* buf) override;
- bool Write(rtc::ByteBufferWriter* buf) const override;
-
- void SetTtlSeconds(uint32_t ttl_seconds) { ttl_seconds_ = ttl_seconds; }
- uint32_t GetTtlSeconds() const { return ttl_seconds_; }
- // Returns true if |address| is in the address family AF_INET or AF_INET6 and
- // |address| has a valid IPv4 or IPv6 address; false otherwise.
- bool SetIPAddressInRecordData(const rtc::IPAddress& address);
- // Returns true if the record is of type A or AAAA and the record has a valid
- // IPv4 or IPv6 address; false otherwise. Stores the valid IP in |address|.
- bool GetIPAddressFromRecordData(rtc::IPAddress* address) const;
-
- private:
- // The list of methods reading and writing rdata can grow as we support more
- // types of rdata.
- bool ReadARData(MessageBufferReader* buf);
- void WriteARData(rtc::ByteBufferWriter* buf) const;
-
- bool ReadQuadARData(MessageBufferReader* buf);
- void WriteQuadARData(rtc::ByteBufferWriter* buf) const;
-
- uint32_t ttl_seconds_ = 0;
- uint16_t rdlength_ = 0;
- std::string rdata_;
-};
-
-class MdnsMessage final {
- public:
- // RFC 1035, Section 4.1.
- enum class Section { kQuestion, kAnswer, kAuthority, kAdditional };
-
- MdnsMessage();
- ~MdnsMessage();
- // Reads the mDNS message in |buf| and populates the corresponding fields in
- // MdnsMessage.
- bool Read(MessageBufferReader* buf);
- // Write an mDNS message to |buf| based on the fields in MdnsMessage.
- //
- // TODO(qingsi): Implement name compression when writing mDNS messages.
- bool Write(rtc::ByteBufferWriter* buf) const;
-
- void SetId(uint16_t id) { header_.id = id; }
- uint16_t GetId() const { return header_.id; }
-
- void SetQueryOrResponse(bool is_query) {
- header_.SetQueryOrResponse(is_query);
- }
- bool IsQuery() const { return header_.IsQuery(); }
-
- void SetAuthoritative(bool is_authoritative) {
- header_.SetAuthoritative(is_authoritative);
- }
- bool IsAuthoritative() const { return header_.IsAuthoritative(); }
-
- // Returns true if the message is a query and the unicast response is
- // preferred. False otherwise.
- bool ShouldUnicastResponse() const;
-
- void AddQuestion(const MdnsQuestion& question);
- // TODO(qingsi): Implement AddXRecord for name server and additional records.
- void AddAnswerRecord(const MdnsResourceRecord& answer);
-
- const std::vector<MdnsQuestion>& question_section() const {
- return question_section_;
- }
- const std::vector<MdnsResourceRecord>& answer_section() const {
- return answer_section_;
- }
- const std::vector<MdnsResourceRecord>& authority_section() const {
- return authority_section_;
- }
- const std::vector<MdnsResourceRecord>& additional_section() const {
- return additional_section_;
- }
-
- private:
- MdnsHeader header_;
- std::vector<MdnsQuestion> question_section_;
- std::vector<MdnsResourceRecord> answer_section_;
- std::vector<MdnsResourceRecord> authority_section_;
- std::vector<MdnsResourceRecord> additional_section_;
-};
-
-} // namespace webrtc
-
-#endif // P2P_BASE_MDNS_MESSAGE_H_
diff --git a/p2p/base/mdns_message_unittest.cc b/p2p/base/mdns_message_unittest.cc
deleted file mode 100644
index 2f1f74d..0000000
--- a/p2p/base/mdns_message_unittest.cc
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * Copyright 2018 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 "p2p/base/mdns_message.h"
-
-#include <map>
-#include <set>
-#include <string>
-
-#include "rtc_base/byte_buffer.h"
-#include "rtc_base/gunit.h"
-#include "rtc_base/ip_address.h"
-#include "rtc_base/socket_address.h"
-#include "test/gmock.h"
-
-#define ReadMdnsMessage(X, Y) ReadMdnsMessageTestCase(X, Y, sizeof(Y))
-#define WriteMdnsMessageAndCompare(X, Y) \
- WriteMdnsMessageAndCompareWithTestCast(X, Y, sizeof(Y))
-
-using ::testing::ElementsAre;
-using ::testing::Pair;
-using ::testing::UnorderedElementsAre;
-
-namespace webrtc {
-
-namespace {
-
-const uint8_t kSingleQuestionForIPv4AddrWithUnicastResponse[] = {
- 0x12, 0x34, // ID
- 0x00, 0x00, // flags
- 0x00, 0x01, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x06, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, // webrtc
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x80, 0x01, // class IN, unicast response
-};
-
-const uint8_t kTwoQuestionsForIPv4AndIPv6AddrWithMulticastResponse[] = {
- 0x12, 0x34, // ID
- 0x00, 0x00, // flags
- 0x00, 0x02, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x07, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, 0x34, // webrtc4
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN, multicast response
- 0x07, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, 0x36, // webrtc6
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x1C, // type AAAA Record
- 0x00, 0x01, // class IN, multicast response
-};
-
-const uint8_t
- kTwoQuestionsForIPv4AndIPv6AddrWithMulticastResponseAndNameCompression[] = {
- 0x12, 0x34, // ID
- 0x00, 0x00, // flags
- 0x00, 0x02, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x03, 0x77, 0x77, 0x77, // www
- 0x06, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, // webrtc
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN, multicast response
- 0x04, 0x6d, 0x64, 0x6e, 0x73, // mdns
- 0xc0, 0x10, // offset 16, webrtc.org.
- 0x00, 0x1C, // type AAAA Record
- 0x00, 0x01, // class IN, multicast response
-};
-
-const uint8_t kThreeQuestionsWithTwoPointersToTheSameNameSuffix[] = {
- 0x12, 0x34, // ID
- 0x00, 0x00, // flags
- 0x00, 0x03, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x03, 0x77, 0x77, 0x77, // www
- 0x06, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, // webrtc
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN, multicast response
- 0x04, 0x6d, 0x64, 0x6e, 0x73, // mdns
- 0xc0, 0x10, // offset 16, webrtc.org.
- 0x00, 0x1C, // type AAAA Record
- 0x00, 0x01, // class IN, multicast response
- 0xc0, 0x10, // offset 16, webrtc.org.
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN, multicast response
-};
-
-const uint8_t kThreeQuestionsWithPointerToNameSuffixContainingAnotherPointer[] =
- {
- 0x12, 0x34, // ID
- 0x00, 0x00, // flags
- 0x00, 0x03, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x03, 0x77, 0x77, 0x77, // www
- 0x06, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, // webrtc
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN, multicast response
- 0x04, 0x6d, 0x64, 0x6e, 0x73, // mdns
- 0xc0, 0x10, // offset 16, webrtc.org.
- 0x00, 0x1C, // type AAAA Record
- 0x00, 0x01, // class IN, multicast response
- 0x03, 0x77, 0x77, 0x77, // www
- 0xc0, 0x20, // offset 32, mdns.webrtc.org.
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN, multicast response
-};
-
-const uint8_t kCorruptedQuestionWithNameCompression1[] = {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x01, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0xc0, 0x0c, // offset 12,
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
-};
-
-const uint8_t kCorruptedQuestionWithNameCompression2[] = {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x01, // number of questions
- 0x00, 0x00, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x01, 0x77, // w
- 0xc0, 0x0c, // offset 12,
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
-};
-
-const uint8_t kSingleAuthoritativeAnswerWithIPv4Addr[] = {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x00, // number of questions
- 0x00, 0x01, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x06, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, // webrtc
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x78, // TTL, 120 seconds
- 0x00, 0x04, // rdlength, 32 bits
- 0xC0, 0xA8, 0x00, 0x01, // 192.168.0.1
-};
-
-const uint8_t kTwoAuthoritativeAnswersWithIPv4AndIPv6Addr[] = {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x00, // number of questions
- 0x00, 0x02, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x07, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, 0x34, // webrtc4
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x3c, // TTL, 60 seconds
- 0x00, 0x04, // rdlength, 32 bits
- 0xC0, 0xA8, 0x00, 0x01, // 192.168.0.1
- 0x07, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, 0x36, // webrtc6
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x1C, // type AAAA Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x78, // TTL, 120 seconds
- 0x00, 0x10, // rdlength, 128 bits
- 0xfd, 0x12, 0x34, 0x56, 0x78, 0x9a, 0x00, 0x01, // fd12:3456:789a:1::1
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-};
-
-const uint8_t kTwoAuthoritativeAnswersWithIPv4AndIPv6AddrWithNameCompression[] =
- {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x00, // number of questions
- 0x00, 0x02, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x03, 0x77, 0x77, 0x77, // www
- 0x06, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, // webrtc
- 0x03, 0x6f, 0x72, 0x67, // org
- 0x00, // null label
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x3c, // TTL, 60 seconds
- 0x00, 0x04, // rdlength, 32 bits
- 0xc0, 0xA8, 0x00, 0x01, // 192.168.0.1
- 0xc0, 0x10, // offset 16, webrtc.org.
- 0x00, 0x1C, // type AAAA Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x78, // TTL, 120 seconds
- 0x00, 0x10, // rdlength, 128 bits
- 0xfd, 0x12, 0x34, 0x56, 0x78, 0x9a, 0x00, 0x01, // fd12:3456:789a:1::1
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-};
-
-const uint8_t kCorruptedAnswerWithNameCompression1[] = {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x00, // number of questions
- 0x00, 0x01, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0xc0, 0x0c, // offset 12,
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x3c, // TTL, 60 seconds
- 0x00, 0x04, // rdlength, 32 bits
- 0xc0, 0xA8, 0x00, 0x01, // 192.168.0.1
-};
-
-const uint8_t kCorruptedAnswerWithNameCompression2[] = {
- 0x12, 0x34, // ID
- 0x84, 0x00, // flags
- 0x00, 0x00, // number of questions
- 0x00, 0x01, // number of answer rr
- 0x00, 0x00, // number of name server rr
- 0x00, 0x00, // number of additional rr
- 0x01, 0x77, // w
- 0xc0, 0x0c, // offset 12,
- 0x00, 0x01, // type A Record
- 0x00, 0x01, // class IN
- 0x00, 0x00, 0x00, 0x3c, // TTL, 60 seconds
- 0x00, 0x04, // rdlength, 32 bits
- 0xc0, 0xA8, 0x00, 0x01, // 192.168.0.1
-};
-
-bool ReadMdnsMessageTestCase(MdnsMessage* msg,
- const uint8_t* testcase,
- size_t size) {
- MessageBufferReader buf(reinterpret_cast<const char*>(testcase), size);
- return msg->Read(&buf);
-}
-
-void WriteMdnsMessageAndCompareWithTestCast(MdnsMessage* msg,
- const uint8_t* testcase,
- size_t size) {
- rtc::ByteBufferWriter out;
- EXPECT_TRUE(msg->Write(&out));
- EXPECT_EQ(size, out.Length());
- int len = static_cast<int>(out.Length());
- rtc::ByteBufferReader read_buf(out);
- std::string bytes;
- read_buf.ReadString(&bytes, len);
- std::string testcase_bytes(reinterpret_cast<const char*>(testcase), size);
- EXPECT_EQ(testcase_bytes, bytes);
-}
-
-bool GetQueriedNames(MdnsMessage* msg, std::set<std::string>* names) {
- if (!msg->IsQuery() || msg->question_section().empty()) {
- return false;
- }
- for (const auto& question : msg->question_section()) {
- names->insert(question.GetName());
- }
- return true;
-}
-
-bool GetResolution(MdnsMessage* msg,
- std::map<std::string, rtc::IPAddress>* names) {
- if (msg->IsQuery() || msg->answer_section().empty()) {
- return false;
- }
- for (const auto& answer : msg->answer_section()) {
- rtc::IPAddress resolved_addr;
- if (!answer.GetIPAddressFromRecordData(&resolved_addr)) {
- return false;
- }
- (*names)[answer.GetName()] = resolved_addr;
- }
- return true;
-}
-
-} // namespace
-
-TEST(MdnsMessageTest, ReadSingleQuestionForIPv4Address) {
- MdnsMessage msg;
- ASSERT_TRUE(
- ReadMdnsMessage(&msg, kSingleQuestionForIPv4AddrWithUnicastResponse));
- EXPECT_TRUE(msg.IsQuery());
- EXPECT_EQ(0x1234, msg.GetId());
- ASSERT_EQ(1u, msg.question_section().size());
- EXPECT_EQ(0u, msg.answer_section().size());
- EXPECT_EQ(0u, msg.authority_section().size());
- EXPECT_EQ(0u, msg.additional_section().size());
- EXPECT_TRUE(msg.ShouldUnicastResponse());
-
- const auto& question = msg.question_section()[0];
- EXPECT_EQ(SectionEntryType::kA, question.GetType());
-
- std::set<std::string> queried_names;
- EXPECT_TRUE(GetQueriedNames(&msg, &queried_names));
- EXPECT_THAT(queried_names, ElementsAre("webrtc.org."));
-}
-
-TEST(MdnsMessageTest, ReadTwoQuestionsForIPv4AndIPv6Addr) {
- MdnsMessage msg;
- ASSERT_TRUE(ReadMdnsMessage(
- &msg, kTwoQuestionsForIPv4AndIPv6AddrWithMulticastResponse));
- EXPECT_TRUE(msg.IsQuery());
- EXPECT_EQ(0x1234, msg.GetId());
- ASSERT_EQ(2u, msg.question_section().size());
- EXPECT_EQ(0u, msg.answer_section().size());
- EXPECT_EQ(0u, msg.authority_section().size());
- EXPECT_EQ(0u, msg.additional_section().size());
-
- const auto& question1 = msg.question_section()[0];
- const auto& question2 = msg.question_section()[1];
- EXPECT_EQ(SectionEntryType::kA, question1.GetType());
- EXPECT_EQ(SectionEntryType::kAAAA, question2.GetType());
-
- std::set<std::string> queried_names;
- EXPECT_TRUE(GetQueriedNames(&msg, &queried_names));
- EXPECT_THAT(queried_names,
- UnorderedElementsAre("webrtc4.org.", "webrtc6.org."));
-}
-
-TEST(MdnsMessageTest, ReadTwoQuestionsForIPv4AndIPv6AddrWithNameCompression) {
- MdnsMessage msg;
- ASSERT_TRUE(ReadMdnsMessage(
- &msg,
- kTwoQuestionsForIPv4AndIPv6AddrWithMulticastResponseAndNameCompression));
-
- ASSERT_EQ(2u, msg.question_section().size());
- const auto& question1 = msg.question_section()[0];
- const auto& question2 = msg.question_section()[1];
- EXPECT_EQ(SectionEntryType::kA, question1.GetType());
- EXPECT_EQ(SectionEntryType::kAAAA, question2.GetType());
-
- std::set<std::string> queried_names;
- EXPECT_TRUE(GetQueriedNames(&msg, &queried_names));
- EXPECT_THAT(queried_names,
- UnorderedElementsAre("www.webrtc.org.", "mdns.webrtc.org."));
-}
-
-TEST(MdnsMessageTest, ReadThreeQuestionsWithTwoPointersToTheSameNameSuffix) {
- MdnsMessage msg;
- ASSERT_TRUE(
- ReadMdnsMessage(&msg, kThreeQuestionsWithTwoPointersToTheSameNameSuffix));
-
- ASSERT_EQ(3u, msg.question_section().size());
- const auto& question1 = msg.question_section()[0];
- const auto& question2 = msg.question_section()[1];
- const auto& question3 = msg.question_section()[2];
- EXPECT_EQ(SectionEntryType::kA, question1.GetType());
- EXPECT_EQ(SectionEntryType::kAAAA, question2.GetType());
- EXPECT_EQ(SectionEntryType::kA, question3.GetType());
-
- std::set<std::string> queried_names;
- EXPECT_TRUE(GetQueriedNames(&msg, &queried_names));
- EXPECT_THAT(queried_names,
- UnorderedElementsAre("www.webrtc.org.", "mdns.webrtc.org.",
- "webrtc.org."));
-}
-
-TEST(MdnsMessageTest,
- ReadThreeQuestionsWithPointerToNameSuffixContainingAnotherPointer) {
- MdnsMessage msg;
- ASSERT_TRUE(ReadMdnsMessage(
- &msg, kThreeQuestionsWithPointerToNameSuffixContainingAnotherPointer));
-
- ASSERT_EQ(3u, msg.question_section().size());
- const auto& question1 = msg.question_section()[0];
- const auto& question2 = msg.question_section()[1];
- const auto& question3 = msg.question_section()[2];
- EXPECT_EQ(SectionEntryType::kA, question1.GetType());
- EXPECT_EQ(SectionEntryType::kAAAA, question2.GetType());
- EXPECT_EQ(SectionEntryType::kA, question3.GetType());
-
- std::set<std::string> queried_names;
- EXPECT_TRUE(GetQueriedNames(&msg, &queried_names));
- EXPECT_THAT(queried_names,
- UnorderedElementsAre("www.webrtc.org.", "mdns.webrtc.org.",
- "www.mdns.webrtc.org."));
-}
-
-TEST(MdnsMessageTest,
- ReadQuestionWithCorruptedPointerInNameCompressionShouldFail) {
- MdnsMessage msg;
- EXPECT_FALSE(ReadMdnsMessage(&msg, kCorruptedQuestionWithNameCompression1));
- EXPECT_FALSE(ReadMdnsMessage(&msg, kCorruptedQuestionWithNameCompression2));
-}
-
-TEST(MdnsMessageTest, ReadSingleAnswerForIPv4Addr) {
- MdnsMessage msg;
- ASSERT_TRUE(ReadMdnsMessage(&msg, kSingleAuthoritativeAnswerWithIPv4Addr));
- EXPECT_FALSE(msg.IsQuery());
- EXPECT_TRUE(msg.IsAuthoritative());
- EXPECT_EQ(0x1234, msg.GetId());
- EXPECT_EQ(0u, msg.question_section().size());
- ASSERT_EQ(1u, msg.answer_section().size());
- EXPECT_EQ(0u, msg.authority_section().size());
- EXPECT_EQ(0u, msg.additional_section().size());
-
- const auto& answer = msg.answer_section()[0];
- EXPECT_EQ(SectionEntryType::kA, answer.GetType());
- EXPECT_EQ(120u, answer.GetTtlSeconds());
-
- std::map<std::string, rtc::IPAddress> resolution;
- EXPECT_TRUE(GetResolution(&msg, &resolution));
- rtc::IPAddress expected_addr(rtc::SocketAddress("192.168.0.1", 0).ipaddr());
- EXPECT_THAT(resolution, ElementsAre(Pair("webrtc.org.", expected_addr)));
-}
-
-TEST(MdnsMessageTest, ReadTwoAnswersForIPv4AndIPv6Addr) {
- MdnsMessage msg;
- ASSERT_TRUE(
- ReadMdnsMessage(&msg, kTwoAuthoritativeAnswersWithIPv4AndIPv6Addr));
- EXPECT_FALSE(msg.IsQuery());
- EXPECT_TRUE(msg.IsAuthoritative());
- EXPECT_EQ(0x1234, msg.GetId());
- EXPECT_EQ(0u, msg.question_section().size());
- ASSERT_EQ(2u, msg.answer_section().size());
- EXPECT_EQ(0u, msg.authority_section().size());
- EXPECT_EQ(0u, msg.additional_section().size());
-
- const auto& answer1 = msg.answer_section()[0];
- const auto& answer2 = msg.answer_section()[1];
- EXPECT_EQ(SectionEntryType::kA, answer1.GetType());
- EXPECT_EQ(SectionEntryType::kAAAA, answer2.GetType());
- EXPECT_EQ(60u, answer1.GetTtlSeconds());
- EXPECT_EQ(120u, answer2.GetTtlSeconds());
-
- std::map<std::string, rtc::IPAddress> resolution;
- EXPECT_TRUE(GetResolution(&msg, &resolution));
- rtc::IPAddress expected_addr_ipv4(
- rtc::SocketAddress("192.168.0.1", 0).ipaddr());
- rtc::IPAddress expected_addr_ipv6(
- rtc::SocketAddress("fd12:3456:789a:1::1", 0).ipaddr());
- EXPECT_THAT(resolution,
- UnorderedElementsAre(Pair("webrtc4.org.", expected_addr_ipv4),
- Pair("webrtc6.org.", expected_addr_ipv6)));
-}
-
-TEST(MdnsMessageTest, ReadTwoAnswersForIPv4AndIPv6AddrWithNameCompression) {
- MdnsMessage msg;
- ASSERT_TRUE(ReadMdnsMessage(
- &msg, kTwoAuthoritativeAnswersWithIPv4AndIPv6AddrWithNameCompression));
-
- std::map<std::string, rtc::IPAddress> resolution;
- EXPECT_TRUE(GetResolution(&msg, &resolution));
- rtc::IPAddress expected_addr_ipv4(
- rtc::SocketAddress("192.168.0.1", 0).ipaddr());
- rtc::IPAddress expected_addr_ipv6(
- rtc::SocketAddress("fd12:3456:789a:1::1", 0).ipaddr());
- EXPECT_THAT(resolution,
- UnorderedElementsAre(Pair("www.webrtc.org.", expected_addr_ipv4),
- Pair("webrtc.org.", expected_addr_ipv6)));
-}
-
-TEST(MdnsMessageTest,
- ReadAnswerWithCorruptedPointerInNameCompressionShouldFail) {
- MdnsMessage msg;
- EXPECT_FALSE(ReadMdnsMessage(&msg, kCorruptedAnswerWithNameCompression1));
- EXPECT_FALSE(ReadMdnsMessage(&msg, kCorruptedAnswerWithNameCompression2));
-}
-
-TEST(MdnsMessageTest, WriteSingleQuestionForIPv4Addr) {
- MdnsMessage msg;
- msg.SetId(0x1234);
- msg.SetQueryOrResponse(true);
-
- MdnsQuestion question;
- question.SetName("webrtc.org.");
- question.SetType(SectionEntryType::kA);
- question.SetClass(SectionEntryClass::kIN);
- question.SetUnicastResponse(true);
- msg.AddQuestion(question);
-
- WriteMdnsMessageAndCompare(&msg,
- kSingleQuestionForIPv4AddrWithUnicastResponse);
-}
-
-TEST(MdnsMessageTest, WriteTwoQuestionsForIPv4AndIPv6Addr) {
- MdnsMessage msg;
- msg.SetId(0x1234);
- msg.SetQueryOrResponse(true);
-
- MdnsQuestion question1;
- question1.SetName("webrtc4.org.");
- question1.SetType(SectionEntryType::kA);
- question1.SetClass(SectionEntryClass::kIN);
- msg.AddQuestion(question1);
-
- MdnsQuestion question2;
- question2.SetName("webrtc6.org.");
- question2.SetType(SectionEntryType::kAAAA);
- question2.SetClass(SectionEntryClass::kIN);
- msg.AddQuestion(question2);
-
- WriteMdnsMessageAndCompare(
- &msg, kTwoQuestionsForIPv4AndIPv6AddrWithMulticastResponse);
-}
-
-TEST(MdnsMessageTest, WriteSingleAnswerToIPv4Addr) {
- MdnsMessage msg;
- msg.SetId(0x1234);
- msg.SetQueryOrResponse(false);
- msg.SetAuthoritative(true);
-
- MdnsResourceRecord answer;
- answer.SetName("webrtc.org.");
- answer.SetType(SectionEntryType::kA);
- answer.SetClass(SectionEntryClass::kIN);
- EXPECT_TRUE(answer.SetIPAddressInRecordData(
- rtc::SocketAddress("192.168.0.1", 0).ipaddr()));
- answer.SetTtlSeconds(120);
- msg.AddAnswerRecord(answer);
-
- WriteMdnsMessageAndCompare(&msg, kSingleAuthoritativeAnswerWithIPv4Addr);
-}
-
-TEST(MdnsMessageTest, WriteTwoAnswersToIPv4AndIPv6Addr) {
- MdnsMessage msg;
- msg.SetId(0x1234);
- msg.SetQueryOrResponse(false);
- msg.SetAuthoritative(true);
-
- MdnsResourceRecord answer1;
- answer1.SetName("webrtc4.org.");
- answer1.SetType(SectionEntryType::kA);
- answer1.SetClass(SectionEntryClass::kIN);
- answer1.SetIPAddressInRecordData(
- rtc::SocketAddress("192.168.0.1", 0).ipaddr());
- answer1.SetTtlSeconds(60);
- msg.AddAnswerRecord(answer1);
-
- MdnsResourceRecord answer2;
- answer2.SetName("webrtc6.org.");
- answer2.SetType(SectionEntryType::kAAAA);
- answer2.SetClass(SectionEntryClass::kIN);
- answer2.SetIPAddressInRecordData(
- rtc::SocketAddress("fd12:3456:789a:1::1", 0).ipaddr());
- answer2.SetTtlSeconds(120);
- msg.AddAnswerRecord(answer2);
-
- WriteMdnsMessageAndCompare(&msg, kTwoAuthoritativeAnswersWithIPv4AndIPv6Addr);
-}
-
-} // namespace webrtc
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index e08ba3c..9395c7a 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -443,15 +443,6 @@
dict = "corpora/stun.tokens"
}
-webrtc_fuzzer_test("mdns_parser_fuzzer") {
- sources = [ "mdns_parser_fuzzer.cc" ]
- deps = [
- "../../p2p:rtc_p2p",
- "../../rtc_base:rtc_base_approved",
- ]
- seed_corpus = "corpora/mdns-corpus"
-}
-
webrtc_fuzzer_test("pseudotcp_parser_fuzzer") {
sources = [ "pseudotcp_parser_fuzzer.cc" ]
deps = [
diff --git a/test/fuzzers/mdns_parser_fuzzer.cc b/test/fuzzers/mdns_parser_fuzzer.cc
deleted file mode 100644
index 4517423..0000000
--- a/test/fuzzers/mdns_parser_fuzzer.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2018 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 <memory>
-
-#include "p2p/base/mdns_message.h"
-#include "rtc_base/message_buffer_reader.h"
-
-namespace webrtc {
-
-void FuzzOneInput(const uint8_t* data, size_t size) {
- MessageBufferReader buf(reinterpret_cast<const char*>(data), size);
- auto mdns_msg = std::make_unique<MdnsMessage>();
- mdns_msg->Read(&buf);
-}
-
-} // namespace webrtc