Bug 1371161: port SDP file parser to LibFuzzer draft
authorNils Ohlmeier [:drno] <drno@ohlmeier.org>
Wed, 07 Jun 2017 21:48:00 -0700
changeset 590827 1a9b79854a1c2ea871b0afa62085785a47cca2d1
parent 589954 5801aa478de12a62b2b2982659e787fcc4268d67
child 632315 e91126e0a7baff31264a589ea6dd8095e01d7998
push id62839
push userdrno@ohlmeier.org
push dateThu, 08 Jun 2017 04:49:35 +0000
bugs1371161
milestone55.0a1
Bug 1371161: port SDP file parser to LibFuzzer MozReview-Commit-ID: BUMwyjbhU2p
media/webrtc/signaling/fuzztest/moz.build
media/webrtc/signaling/fuzztest/sdp_file_parser.cpp
media/webrtc/signaling/fuzztest/sdp_parser_libfuzzer.cpp
--- a/media/webrtc/signaling/fuzztest/moz.build
+++ b/media/webrtc/signaling/fuzztest/moz.build
@@ -15,17 +15,16 @@ if CONFIG['OS_TARGET'] == 'Linux' or CON
 
     LOCAL_INCLUDES += [
         '../..',
         '/media/mtransport',
         '/media/webrtc/signaling/src/common/browser_logging',
     ]
 
     USE_LIBS += [
-        '/testing/gtest/gtest',
         'mozglue',
         'nspr',
     ]
 
     SOURCES = [
       '/media/webrtc/signaling/src/sdp/SdpAttribute.cpp',
       '/media/webrtc/signaling/src/sdp/SdpHelper.cpp',
       '/media/webrtc/signaling/src/sdp/SdpMediaSection.cpp',
@@ -38,12 +37,12 @@ if CONFIG['OS_TARGET'] == 'Linux' or CON
       '/media/webrtc/signaling/src/sdp/sipcc/sdp_main.c',
       '/media/webrtc/signaling/src/sdp/sipcc/sdp_services_unix.c',
       '/media/webrtc/signaling/src/sdp/sipcc/sdp_token.c',
       '/media/webrtc/signaling/src/sdp/sipcc/sdp_utils.c',
       '/media/webrtc/signaling/src/sdp/SipccSdp.cpp',
       '/media/webrtc/signaling/src/sdp/SipccSdpAttributeList.cpp',
       '/media/webrtc/signaling/src/sdp/SipccSdpMediaSection.cpp',
       '/media/webrtc/signaling/src/sdp/SipccSdpParser.cpp',
-      'sdp_file_parser.cpp',
+      'sdp_parser_libfuzzer.cpp',
     ]
 
-    Program('sdp_file_parser')
+    Program('sdp_parser_libfuzzer')
deleted file mode 100644
--- a/media/webrtc/signaling/fuzztest/sdp_file_parser.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <string>
-#include <iostream>
-#include <fstream>
-
-#define GTEST_HAS_RTTI 0
-#include "gtest/gtest.h"
-
-#include "signaling/src/sdp/SipccSdpParser.h"
-
-#include "CSFLog.h"
-
-void CSFLog(CSFLogLevel priority, const char* sourceFile, int sourceLine, const char* tag , const char* format, ...)
-{
-  va_list ap;
-  va_start(ap, format);
-
-  printf("%s\n:", tag);
-  vprintf(format, ap);
-
-  va_end(ap);
-}
-
-extern "C" {
-void NS_DebugBreak(uint32_t aSeverity,
-                   const char* aStr, const char* aExpr,
-                   const char* aFile, int32_t aLine)
-{
-  fprintf(stderr, "NS_DebugBreak: %u %s %s %s %u", aSeverity, aStr, aExpr,
-          aFile, aLine);
-}
-} // end extern "C".
-
-class PRLogModuleInfo;
-
-namespace mozilla {
-
-enum class LogLevel {
-
-};
-
-namespace detail {
-
-void log_print(PRLogModuleInfo const* info, LogLevel level, char const* format, ...) {
-  va_list ap;
-  va_start(ap, format);
-
-  vprintf(format, ap);
-
-  va_end(ap);
-}
-
-} // End namespace detail.
-
-const std::string kDefaultFilename((char *)"/tmp/sdp.bin");
-std::string filename(kDefaultFilename);
-
-class SdpParseTest : public ::testing::Test
-{
-  public:
-    SdpParseTest() {}
-
-    void ParseSdp(const std::string &sdp) {
-      mSdp = mParser.Parse(sdp);
-    }
-
-    void SerializeSdp() {
-      if (mSdp) {
-          mSdp->Serialize(os);
-          std::cout << "Serialized SDP:" << std::endl <<
-            os.str() << std::endl;;
-      }
-    }
-
-    SipccSdpParser mParser;
-    mozilla::UniquePtr<Sdp> mSdp;
-    std::stringstream os;
-}; // class SdpParseTest
-
-TEST_F(SdpParseTest, parseSdpFromFile)
-{
-  std::ifstream file(filename.c_str(),
-                     std::ios::in|std::ios::binary|std::ios::ate);
-  ASSERT_TRUE(file.is_open());
-  std::streampos size = file.tellg();
-  size_t nsize = size;
-  nsize+=1;
-  char *memblock = new char [nsize];
-  memset(memblock, '\0', nsize);
-  file.seekg(0, std::ios::beg);
-  file.read(memblock, size);
-  file.close();
-  std::cout << "Read file " << filename << std::endl;
-  ParseSdp(memblock);
-  std::cout << "Parsed SDP" << std::endl;
-  SerializeSdp();
-  delete[] memblock;
-}
-
-} // End namespace mozilla.
-
-int main(int argc, char **argv)
-{
-  ::testing::InitGoogleTest(&argc, argv);
-
-  if (argc == 2) {
-    mozilla::filename = argv[1];
-  } else if (argc > 2) {
-    std::cerr << "Usage: ./sdp_file_parser [filename]" << std::endl;
-    return(1);
-  }
-
-  return RUN_ALL_TESTS();
-}
new file mode 100644
--- /dev/null
+++ b/media/webrtc/signaling/fuzztest/sdp_parser_libfuzzer.cpp
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include <stddef.h>
+#include <stdint.h>
+#include <string>
+
+#include "signaling/src/sdp/SipccSdpParser.h"
+
+#include "CSFLog.h"
+
+void CSFLog(CSFLogLevel priority, const char* sourceFile, int sourceLine, const char* tag , const char* format, ...)
+{
+  va_list ap;
+  va_start(ap, format);
+
+  printf("%s\n:", tag);
+  vprintf(format, ap);
+
+  va_end(ap);
+}
+
+extern "C" {
+void NS_DebugBreak(uint32_t aSeverity,
+                   const char* aStr, const char* aExpr,
+                   const char* aFile, int32_t aLine)
+{
+  fprintf(stderr, "NS_DebugBreak: %u %s %s %s %u", aSeverity, aStr, aExpr,
+          aFile, aLine);
+}
+} // end extern "C".
+
+namespace mozilla {
+
+void FuzzOneInput(const uint8_t* data, size_t size) {
+  std::string message(reinterpret_cast<const char*>(data), size);
+
+  mozilla::UniquePtr<Sdp> sdp;
+  SipccSdpParser parser;
+  sdp = parser.Parse(message);
+}
+
+} // End namespace mozilla.
+
+int main(int argc, char **argv) {
+  return 0;
+}
+