diff options
Diffstat (limited to 'clangd/fuzzer')
-rw-r--r-- | clangd/fuzzer/CMakeLists.txt | 20 | ||||
-rw-r--r-- | clangd/fuzzer/DummyClangdMain.cpp | 18 | ||||
-rw-r--r-- | clangd/fuzzer/clangd-fuzzer.cpp (renamed from clangd/fuzzer/ClangdFuzzer.cpp) | 14 |
3 files changed, 36 insertions, 16 deletions
diff --git a/clangd/fuzzer/CMakeLists.txt b/clangd/fuzzer/CMakeLists.txt index ca76c977..28191a3f 100644 --- a/clangd/fuzzer/CMakeLists.txt +++ b/clangd/fuzzer/CMakeLists.txt @@ -1,14 +1,15 @@ -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR}/..) -set(LLVM_LINK_COMPONENTS support) - -if(LLVM_USE_SANITIZE_COVERAGE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer") -endif() +set(LLVM_LINK_COMPONENTS + FuzzMutate + Support + ) -add_clang_executable(clangd-fuzzer - EXCLUDE_FROM_ALL - ClangdFuzzer.cpp +# This fuzzer runs on oss-fuzz, so keep it around even if it looks unreferenced. +add_llvm_fuzzer(clangd-fuzzer + clangd-fuzzer.cpp + DUMMY_MAIN DummyClangdMain.cpp ) target_link_libraries(clangd-fuzzer @@ -20,5 +21,4 @@ target_link_libraries(clangd-fuzzer clangSema clangTooling clangToolingCore - ${LLVM_LIB_FUZZING_ENGINE} ) diff --git a/clangd/fuzzer/DummyClangdMain.cpp b/clangd/fuzzer/DummyClangdMain.cpp new file mode 100644 index 00000000..cd5a6121 --- /dev/null +++ b/clangd/fuzzer/DummyClangdMain.cpp @@ -0,0 +1,18 @@ +//===---- DummyClangdMain.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); +} diff --git a/clangd/fuzzer/ClangdFuzzer.cpp b/clangd/fuzzer/clangd-fuzzer.cpp index 7afd0798..5e7de771 100644 --- a/clangd/fuzzer/ClangdFuzzer.cpp +++ b/clangd/fuzzer/clangd-fuzzer.cpp @@ -1,9 +1,8 @@ //===-- ClangdFuzzer.cpp - Fuzz clangd ------------------------------------===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// 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 // //===----------------------------------------------------------------------===// /// @@ -16,6 +15,7 @@ #include "ClangdLSPServer.h" #include "ClangdServer.h" #include "CodeComplete.h" +#include "FSProvider.h" #include <cstdio> #include <sstream> @@ -29,13 +29,15 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) { std::FILE *In = fmemopen(data, size, "r"); auto Transport = newJSONTransport(In, llvm::nulls(), /*InMirror=*/nullptr, /*Pretty=*/false, - /*Style=*/JSONStreamStyle::Standard); + /*Style=*/JSONStreamStyle::Delimited); + RealFileSystemProvider FS; CodeCompleteOptions CCOpts; CCOpts.EnableSnippets = false; ClangdServer::Options Opts; // Initialize and run ClangdLSPServer. - ClangdLSPServer LSPServer(*Transport, CCOpts, llvm::None, false, Opts); + ClangdLSPServer LSPServer(*Transport, FS, CCOpts, llvm::None, false, + llvm::None, Opts); LSPServer.run(); return 0; } |