[llvm] [Tools] Add yaml2Object fuzzer (PR #77749)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 11 02:37:54 PST 2024


https://github.com/DavidKorczynski created https://github.com/llvm/llvm-project/pull/77749

None

>From 079418ae24bb8f7c122049d81f78452a20863f45 Mon Sep 17 00:00:00 2001
From: David Korczynski <david at adalogics.com>
Date: Thu, 11 Jan 2024 02:36:40 -0800
Subject: [PATCH] [Tools] Add yaml2Object fuzzer

Signed-off-by: David Korczynski <david at adalogics.com>
---
 .../llvm-object-yaml-fuzzer/CMakeLists.txt    |  7 ++++++
 .../llvm-object-yaml-fuzzer.cpp               | 25 +++++++++++++++++++
 2 files changed, 32 insertions(+)
 create mode 100644 llvm/tools/llvm-object-yaml-fuzzer/CMakeLists.txt
 create mode 100644 llvm/tools/llvm-object-yaml-fuzzer/llvm-object-yaml-fuzzer.cpp

diff --git a/llvm/tools/llvm-object-yaml-fuzzer/CMakeLists.txt b/llvm/tools/llvm-object-yaml-fuzzer/CMakeLists.txt
new file mode 100644
index 00000000000000..033a510c253c20
--- /dev/null
+++ b/llvm/tools/llvm-object-yaml-fuzzer/CMakeLists.txt
@@ -0,0 +1,7 @@
+set(LLVM_LINK_COMPONENTS
+  Object
+  ObjectYAML
+)
+add_llvm_fuzzer(llvm-object-yaml-fuzzer
+  llvm-object-yaml-fuzzer.cpp
+)
diff --git a/llvm/tools/llvm-object-yaml-fuzzer/llvm-object-yaml-fuzzer.cpp b/llvm/tools/llvm-object-yaml-fuzzer/llvm-object-yaml-fuzzer.cpp
new file mode 100644
index 00000000000000..fc92ba0489dc59
--- /dev/null
+++ b/llvm/tools/llvm-object-yaml-fuzzer/llvm-object-yaml-fuzzer.cpp
@@ -0,0 +1,25 @@
+//===-- llvm-object-yaml-fuzzer.cpp - Fuzzer for llvm/lib/ObjectYaml ------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Object/ObjectFile.h"
+#include "llvm/ObjectYAML/yaml2obj.h"
+
+using namespace llvm;
+using namespace object;
+using namespace yaml;
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+  bool ErrorReported = false;
+  auto ErrHandler = [&](const Twine &Msg) { ErrorReported = true; };
+  std::string Payload(reinterpret_cast<const char *>(Data), Size);
+  SmallString<0> Storage;
+  std::unique_ptr<ObjectFile> Obj =
+      yaml2ObjectFile(Storage, Payload, ErrHandler);
+  return 0;
+}



More information about the llvm-commits mailing list