Skip to content

Commit

Permalink
Add fuzzer for Rust demangler
Browse files Browse the repository at this point in the history
Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D101823
  • Loading branch information
tmiasko authored and dwblaikie committed May 5, 2021
1 parent 75ba351 commit 0e7c2ae
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 0 deletions.
10 changes: 10 additions & 0 deletions llvm/tools/llvm-rust-demangle-fuzzer/CMakeLists.txt
@@ -0,0 +1,10 @@
set(LLVM_LINK_COMPONENTS
Demangle
FuzzMutate
Support
)

add_llvm_fuzzer(llvm-rust-demangle-fuzzer
llvm-rust-demangle-fuzzer.cpp
DUMMY_MAIN DummyDemanglerFuzzer.cpp
)
18 changes: 18 additions & 0 deletions llvm/tools/llvm-rust-demangle-fuzzer/DummyDemanglerFuzzer.cpp
@@ -0,0 +1,18 @@
//===-- DummyDemanglerFuzzer.cpp - Entry point to sanity check the 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
//
//===----------------------------------------------------------------------===//
//
// Implementation of main so we can build and test without linking libFuzzer.
//
//===----------------------------------------------------------------------===//

#include "llvm/FuzzMutate/FuzzerCLI.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
int main(int argc, char *argv[]) {
return llvm::runFuzzerOnInputs(argc, argv, LLVMFuzzerTestOneInput);
}
21 changes: 21 additions & 0 deletions llvm/tools/llvm-rust-demangle-fuzzer/llvm-rust-demangle-fuzzer.cpp
@@ -0,0 +1,21 @@
//===--- llvm-demangle-fuzzer.cpp - Fuzzer for the Rust Demangler ---------===//
//
// 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/Demangle/Demangle.h"

#include <cstdint>
#include <cstdlib>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
std::string NullTerminatedString((const char *)Data, Size);
int Status = 0;
char *Demangled = llvm::rustDemangle(NullTerminatedString.c_str(), nullptr,
nullptr, &Status);
std::free(Demangled);
return 0;
}

0 comments on commit 0e7c2ae

Please sign in to comment.