Summary:
Use first byte of input to determine whether to call itaniumDemangle()
or microsoftDemangle().
Addresses https://bugs.llvm.org/show_bug.cgi?id=39582.
Reviewers: kcc, thakis
Reviewed By: kcc, thakis
Subscribers: mgorny, thakis, erik.pilkington, llvm-commits
Differential Revision: https://reviews.llvm.org/D54780
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350534
91177308-0d34-0410-b5e6-
96231b3b80d8
Support
)
-add_llvm_fuzzer(llvm-demangle-fuzzer
- llvm-demangle-fuzzer.cpp
+add_llvm_fuzzer(llvm-itanium-demangle-fuzzer
+ llvm-itanium-demangle-fuzzer.cpp
DUMMY_MAIN DummyDemanglerFuzzer.cpp
)
--- /dev/null
+set(LLVM_LINK_COMPONENTS
+ Demangle
+ FuzzMutate
+ Support
+)
+
+add_llvm_fuzzer(llvm-microsoft-demangle-fuzzer
+ llvm-microsoft-demangle-fuzzer.cpp
+ DUMMY_MAIN DummyDemanglerFuzzer.cpp
+ )
--- /dev/null
+//===--- DummyDemanglerMain.cpp - Entry point to sanity check the fuzzer --===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// 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);
+}
--- /dev/null
+//===--- llvm-demangle-fuzzer.cpp - Fuzzer for the Itanium Demangler ------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Demangle/Demangle.h"
+
+#include <cstdint>
+#include <cstdlib>
+#include <string>
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+ std::string NullTerminatedString((const char *)Data, Size);
+ free(llvm::microsoftDemangle(NullTerminatedString.c_str(), nullptr, nullptr,
+ nullptr));
+ return 0;
+}