[llvm] [Tools] Add fuzzer for assembly parsing (PR #77751)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 11 02:50:15 PST 2024


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

The goal is to have this fuzzer running as part of the LLVM OSS-Fuzz integration (https://github.com/google/oss-fuzz/tree/master/projects/llvm)

>From 5d79fe6c50e58fb9fa2189e67d05b7ab71a0cd79 Mon Sep 17 00:00:00 2001
From: David Korczynski <david at adalogics.com>
Date: Thu, 11 Jan 2024 02:49:57 -0800
Subject: [PATCH] [Tools] Add fuzzer for assembly parsing

Signed-off-by: David Korczynski <david at adalogics.com>
---
 .../llvm-parse-assembly-fuzzer/CMakeLists.txt |  6 +++++
 .../llvm-parse-assembly-fuzzer.cpp            | 23 +++++++++++++++++++
 2 files changed, 29 insertions(+)
 create mode 100644 llvm/tools/llvm-parse-assembly-fuzzer/CMakeLists.txt
 create mode 100644 llvm/tools/llvm-parse-assembly-fuzzer/llvm-parse-assembly-fuzzer.cpp

diff --git a/llvm/tools/llvm-parse-assembly-fuzzer/CMakeLists.txt b/llvm/tools/llvm-parse-assembly-fuzzer/CMakeLists.txt
new file mode 100644
index 00000000000000..c3b531e134e5bc
--- /dev/null
+++ b/llvm/tools/llvm-parse-assembly-fuzzer/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(LLVM_LINK_COMPONENTS
+  AsmParser
+)
+add_llvm_fuzzer(llvm-parse-assembly-fuzzer
+  llvm-parse-assembly-fuzzer.cpp
+)
diff --git a/llvm/tools/llvm-parse-assembly-fuzzer/llvm-parse-assembly-fuzzer.cpp b/llvm/tools/llvm-parse-assembly-fuzzer/llvm-parse-assembly-fuzzer.cpp
new file mode 100644
index 00000000000000..cca428916acd11
--- /dev/null
+++ b/llvm/tools/llvm-parse-assembly-fuzzer/llvm-parse-assembly-fuzzer.cpp
@@ -0,0 +1,23 @@
+//===-- llvm-parse-assembly-fuzzer.cpp - Fuzz ASM parsing with lib/Fuzzer ===//
+//
+// 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/Analysis/VectorUtils.h"
+#include "llvm/AsmParser/Parser.h"
+
+using namespace llvm;
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+  LLVMContext Ctx;
+  SMDiagnostic Err;
+
+  std::string FuzzInput(reinterpret_cast<const char *>(Data), Size);
+  const std::unique_ptr<Module> M =
+      parseAssemblyString(FuzzInput.c_str(), Err, Ctx);
+
+  return 0;
+}



More information about the llvm-commits mailing list