Browse Source

Merge topic 'fuzz1'

b0107165b7 Tests: Add a fuzzer for oss-fuzz

Acked-by: Kitware Robot <[email protected]>
Merge-request: !5668
Brad King 4 years ago
parent
commit
224956255d
2 changed files with 35 additions and 0 deletions
  1. 8 0
      Tests/Fuzzing/README.rst
  2. 27 0
      Tests/Fuzzing/xml_parser_fuzzer.cc

+ 8 - 0
Tests/Fuzzing/README.rst

@@ -0,0 +1,8 @@
+The fuzzers in this directory are run continuously through OSS-fuzz.
+All fuzzers are implemented by way of the `libFuzzer engine`_.
+
+The link to the OSS-fuzz integration can be found here: (pending)
+All email addresses in the `project.yaml` file on OSS-fuzz will have access
+to detailed bug reports and will be notified via email if/when bugs are found.
+
+.. _`libFuzzer Engine`: https://llvm.org/docs/LibFuzzer.html

+ 27 - 0
Tests/Fuzzing/xml_parser_fuzzer.cc

@@ -0,0 +1,27 @@
+/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+   file Copyright.txt or https://cmake.org/licensing for details.  */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "cmXMLParser.h"
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
+{
+  char test_file[] = "libfuzzer.xml";
+
+  FILE* fp = fopen(test_file, "wb");
+  if (!fp)
+    return 0;
+  fwrite(data, size, 1, fp);
+  fclose(fp);
+
+  cmXMLParser parser;
+  if (!parser.ParseFile(test_file)) {
+    return 1;
+  }
+
+  remove(test_file);
+  return 0;
+}